AsyncTask 안에 서버와 연결을 만들고 있습니다. HttpURLConnection을 사용하고 있습니다. 나는 url에있는 자료를 보내고있다. 아래는 AsyncTask의 doInBackground() 메소드 코드입니다. 서버로 데이터를 보내려고했지만 문제가 해결되지 않았습니다. 나는 또한 Connection close header를 설정하려고 시도했다. 그러나 문제는 여전히 지속됩니다.안드로이드 : HttpURLConnection 던지고 EOFException
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)
도와주세요.
매니페스트에 인터넷 사용 권한을 추가하셨습니까? – Selvin
인터넷 권한은 괜찮습니다. –
2 개의 println 뒤에'output.close();를 움직여보십시오. 파일 끝 예외는 con.getresponsecode가 이미 끝에 도달 한 것을 읽으려고한다는 것을 의미합니다. 이것이 실제로 btw를 도울 것인지 확실하지 않아서 원인이 무엇인지 추측 할 수 있습니다. – SvenT23