Android:EOFEException对空响应

Android:EOFEException对空响应,android,response,httpurlconnection,eofexception,Android,Response,Httpurlconnection,Eofexception,我正在使用以下代码。(ServiceResponse是一个仅用于包装响应的对象) 受保护的ServiceResponse executeHttpPostRequest(URL、, 映射参数)引发IOException{ 字符串charset=“utf-8”; Set keys=parameters.keySet(); StringBuffer查询=新建StringBuffer(); 用于(字符串键:键){ 查询。追加(键); 查询。追加(“=”); append(URLEncoder.encod

我正在使用以下代码。(ServiceResponse是一个仅用于包装响应的对象)

受保护的ServiceResponse executeHttpPostRequest(URL、,
映射参数)引发IOException{
字符串charset=“utf-8”;
Set keys=parameters.keySet();
StringBuffer查询=新建StringBuffer();
用于(字符串键:键){
查询。追加(键);
查询。追加(“=”);
append(URLEncoder.encode(parameters.get(key)、charset));
查询。追加(“&”);
}
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
如果(Build.VERSION.SDK_INT>13){
connection.setRequestProperty(“连接”、“关闭”);
}
connection.setDoOutput(真);
connection.setChunkedStreamingMode(0);
connection.setRequestMethod(“POST”);
setRequestProperty(“接受字符集”,字符集);
connection.setRequestProperty(“内容类型”,
“application/x-www-form-urlencoded;charset=“+charset”);
connection.setRequestProperty(“内容长度”,
Integer.toString(query.length());
OutputStream output=connection.getOutputStream();
write(query.toString().getBytes(charset));
ServiceResponse=新的ServiceResponse();
setHttpCode(connection.getResponseCode());
if(connection.getResponseCode()==200&&connection.getContentLength()>0){
setInputStream(connection.getInputStream());
}
output.close();
返回响应;
}

我在调用HttpURLConnection.getResopnseCode或HttpURLConnection.getContentLength时遇到EOFEException,并且服务器仅响应HTTP代码200,但没有响应内容。我在其他具有主体响应(JSON)且工作正常的服务调用上使用了精确的方法。我在这里看到了类似的帖子,并试图在没有运气的情况下应用修复程序(这就是为什么你可以看到“连接”设置得非常好)。我还使用了System.setProperty(“http.keepAlive”、“false”)以防万一

更新

这是stacktrace

05-07 14:16:09.275: E/com.foo.android.InternalService(19594): java.io.EOFException
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at java.util.zip.GZIPInputStream.readFully(GZIPInputStream.java:206)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:98)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:81)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at libcore.net.http.HttpEngine.initContentStream(HttpEngine.java:541)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:844)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:495)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at com.foo.android.net.BaseServiceCall.executeHttpPostRequest(BaseServiceCall.java:100)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at com.foo.android.InternalService.authentitate(InternalService.java:95)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at com.foo.android.ui.LauncherActivity$1.work(LauncherActivity.java:70)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at com.coredroid.util.BackgroundTask$BackgroundThread.run(BackgroundTask.java:74)
05-07 14:16:09.275:E/com.foo.android.InternalService(19594):java.io.eofeexception
05-07 14:16:09.275:E/com.foo.android.InternalService(19594):位于java.util.zip.GZIPInputStream.readFully(GZIPInputStream.java:206)
05-07 14:16:09.275:E/com.foo.android.InternalService(19594):位于java.util.zip.GZIPInputStream.(GZIPInputStream.java:98)
05-07 14:16:09.275:E/com.foo.android.InternalService(19594):位于java.util.zip.GZIPInputStream。(GZIPInputStream.java:81)
05-07 14:16:09.275:E/com.foo.android.InternalService(19594):位于libcore.net.http.HttpEngine.initContentStream(HttpEngine.java:541)
05-07 14:16:09.275:E/com.foo.android.InternalService(19594):位于libcore.net.http.HttpEngine.readResponse(HttpEngine.java:844)
05-07 14:16:09.275:E/com.foo.android.InternalService(19594):位于libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283)
05-07 14:16:09.275:E/com.foo.android.InternalService(19594):位于libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:495)
05-07 14:16:09.275:E/com.foo.android.InternalService(19594):位于com.foo.android.net.BaseServiceCall.executeHttpPostRequest(BaseServiceCall.java:100)
05-07 14:16:09.275:E/com.foo.android.InternalService(19594):位于com.foo.android.InternalService.authentate(InternalService.java:95)
05-07 14:16:09.275:E/com.foo.android.InternalService(19594):位于com.foo.android.ui.LauncherActivity$1.work(LauncherActivity.java:70)
05-07 14:16:09.275:E/com.foo.android.InternalService(19594):位于com.coredroid.util.BackgroundTask$BackgroundThread.run(BackgroundTask.java:74)

HttpURLConnection.getContentLength()不会引发EOFEException。发布stacktrace。@droid刚刚添加了stacktrace。似乎服务器设置了
内容编码:gzip
,但没有返回有效的gzip数据。getContentLength()返回什么?在getResponseCode()之前调用它。
05-07 14:16:09.275: E/com.foo.android.InternalService(19594): java.io.EOFException
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at java.util.zip.GZIPInputStream.readFully(GZIPInputStream.java:206)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:98)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:81)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at libcore.net.http.HttpEngine.initContentStream(HttpEngine.java:541)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:844)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:495)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at com.foo.android.net.BaseServiceCall.executeHttpPostRequest(BaseServiceCall.java:100)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at com.foo.android.InternalService.authentitate(InternalService.java:95)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at com.foo.android.ui.LauncherActivity$1.work(LauncherActivity.java:70)
05-07 14:16:09.275: E/com.foo.android.InternalService(19594):   at com.coredroid.util.BackgroundTask$BackgroundThread.run(BackgroundTask.java:74)