【问题标题】:Android: HttpURLConnection throwing EOFExceptionAndroid:HttpURLConnection 抛出 EOFException
【发布时间】:2014-05-23 11:22:35
【问题描述】:

我正在 AsyncTask 中创建与服务器的连接。我正在使用 HttpURLConnection。我在 url 中发送数据。下面是 AsyncTask 的 doInBackground() 方法的代码。我尝试重试将数据发送到服务器,但问题没有解决。我也尝试设置连接关闭标题。但是,问题仍然存在。

protected String doInBackground(String... url) {
    JSONObject body = new JSONObject();
    try {
        body.put("body","");
    } catch (JSONException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    mUploadChunkURL = url[0];
    System.out.println("length: " + mDataLength + " String length: " + String.valueOf(mDataLength));
    URL myurl;
    HttpsURLConnection con = null;
    while (numberOfTries < MAX_RETRIES) {
        try {
            myurl = new URL(mUploadChunkURL);
            con = (HttpsURLConnection)myurl.openConnection();
            con.setRequestMethod("POST");
            con.setConnectTimeout(1000*60*2);
            con.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); 
            con.setDoOutput(true); 
            con.setDoInput(true);

            if (Build.VERSION.SDK != null
                    && Build.VERSION.SDK_INT > 13) {
                System.out.println("connection close");
                con.setRequestProperty("Connection", "close");
                    }

            DataOutputStream output = new DataOutputStream(con.getOutputStream());  
            output.writeBytes(body.toString());
            output.close();

            System.out.println("Resp Code: "+con.getResponseCode()); 
            System.out.println("Resp Message: "+ con.getResponseMessage()); 

            Log.e("64","Resp Message: "+inputLine.toString());

        } catch (IOException e) {
            Log.e("70", "IO exception: " + e.toString());
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {

            if (con != null)
                con.disconnect();
        }

        numberOfTries++;
    }

    return null;
}

我收到 EOFException。我在这一行“System.out.println(”Resp Code: “+con.getResponseCode());”中遇到了这个异常。以下是错误日志。

05-23 15:46:25.281: W/System.err(16688): java.io.EOFException
05-23 15:46:25.281: W/System.err(16688):    at libcore.io.Streams.readAsciiLine(Streams.java:203)
05-23 15:46:25.281: W/System.err(16688):    at libcore.net.http.HttpEngine.readHeaders(HttpEngine.java:608)
05-23 15:46:25.281: W/System.err(16688):    at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:561)
05-23 15:46:25.281: W/System.err(16688):    at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:813)
05-23 15:46:25.281: W/System.err(16688):    at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274)
05-23 15:46:25.281: W/System.err(16688):    at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:486)
05-23 15:46:25.281: W/System.err(16688):    at libcore.net.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:134)
05-23 15:46:25.281: W/System.err(16688):    at com.utility.UploadFileChunk.doInBackground(UploadFileChunk.java:71)
05-23 15:46:25.296: W/System.err(16688):    at com.utility.UploadFileChunk.doInBackground(UploadFileChunk.java:1)
05-23 15:46:25.296: W/System.err(16688):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-23 15:46:25.296: W/System.err(16688):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
05-23 15:46:25.296: W/System.err(16688):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
05-23 15:46:25.296: W/System.err(16688):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-23 15:46:25.296: W/System.err(16688):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
05-23 15:46:25.296: W/System.err(16688):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
05-23 15:46:25.296: W/System.err(16688):    at java.lang.Thread.run(Thread.java:856)

请帮帮我。

【问题讨论】:

  • 您是否在清单中添加了互联网权限?
  • 网络权限没问题
  • 尝试将您的output.close(); 移到 2 个 println 后面。文件结束异常意味着您的 con.getresponsecode 正在尝试从已经到达其末尾的内容中读取。不确定这是否真的有帮助,只是猜测可能的原因。

标签: android android-asynctask httpurlconnection eofexception


【解决方案1】:

实际上网址格式不正确。因此我得到了EOFException。我在 url 中发送 Base64 数据,在将数据转换为 Base64 时,我没有给出 NO_WRAP 标志。因为 Base64 数据没有排成一行。

【讨论】:

    猜你喜欢
    • 2013-02-16
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    相关资源
    最近更新 更多