2016-04-25 4 views
0

Я пытаюсь прочитать json-файл из URL-адреса в своем Android-проекте. Но странная ситуация случается. StringBuilder успешно получает первые несколько символов, но затем я получаю java.net.SocketException: recvfrom не удалось: EBADF (дескриптор плохих файлов)java.net.SocketException: recvfrom failed: EBADF (Bad file descriptor) Android

Почему я получаю это исключение?

Что случилось с моим кодом)

JSON: http://inlyfortesting.ucoz.net/artists.json

Мои JSONParser:

public JSONArray getJSONFromUrl(String urlAsString) { 
     // try to create JSONObject from string 
     try { 
      URL url = new URL(urlAsString); 
      new DownloadFileTask().execute(url).get(); 
      jObj = new JSONArray(json); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } catch (ExecutionException e) { 
      e.printStackTrace(); 
     } 
     return jObj; 
    } 

    private class DownloadFileTask extends AsyncTask<URL, Integer, Long> { 
     StringBuilder sb; 
     protected Long doInBackground(URL... urls) { 
      HttpURLConnection connection = null; 
      try { 
       connection = (HttpURLConnection) urls[0].openConnection(); 
       is = new BufferedInputStream(connection.getInputStream()); 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      finally { 
       connection.disconnect(); 
      } 

      //file reading 
      try { 
       BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8); 
       sb = new StringBuilder(); 
       int symbol; 
       int counter = 0; 
       while ((symbol = reader.read()) != -1) { //PROBLEM HERE 
        sb.append((char)symbol); //OR HERE 
       } 
       json = sb.toString(); 
       is.close(); 
      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); //java.net.SocketException: recvfrom failed: EBADF (Bad file descriptor) 
      } 
      return null; 
     } 
    } 
+0

'connection.disconnect();'. Удалите это. Если вы отключены, вы не можете читать больше, как вы сейчас пытаетесь сделать. – greenapps

+0

'new DownloadFileTask(). Execute (url) .get();'. Очень плохое программирование для вызова метода .get(). Удалите get() и поместите следующую инструкцию в onPostExecute. – greenapps

ответ

2

Вы отключая связь, прежде чем читать из него. Вы должны сделать это потом.

Несомненно это очевидно?

Смежные вопросы