簡體   English   中英

java.net.SocketException:recvfrom失敗:EBADF(錯誤的文件描述符)Android

[英]java.net.SocketException: recvfrom failed: EBADF (Bad file descriptor) Android

我嘗試從Android項目中的URL讀取json文件。 但奇怪的情況發生了。 StringBuilder成功獲取前幾個字符,但后來我得到java.net.SocketException:recvfrom失敗:EBADF(錯誤的文件描述符)

為什么我得到這個例外?

我的代碼出了什么問題?)

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;
        }
    }

您在讀取連接之前斷開連接。 之后你需要這樣做。

當然這很明顯?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM