报错代码如下:
java.io.EOFException at libcore.io.Streams.readAsciiLine(Streams.java:203) at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:547) at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:787) at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274) at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168) at org.ksoap2.transport.ServiceConnectionSE.openInputStream(ServiceConnectionSE.java:66) at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:77)
int times=CONNECTION_TIMES; String result=ZHCG_WebService.getResponse(url, methodName, params); while(result==null×>0){//当结果为空时,尝试再次连接获取,但连接次数不超过2次 result=ZHCG_WebService.getResponse(url, methodName, params); times--; }上面的ZHCG_WebService.getResponse()就是调用ksoap2-android的一个封装类,返回的数据就是请求结果,当返回结果为null(请求出现异常,如EOFException),则再次请求,times就是重连次数。这只是一时的解决办法。
第二种解决办法,见stackoverflow,它的办法就是如下:
<span style="white-space:pre"> </span>HttpTransportSE transportSE=new HttpTransportSE(url, TIME_OUT); //添加HeaderProperty信息,解决调用call的时候报java.io.EOFException错误 ArrayList<HeaderProperty> headerPropertyArrayList = new ArrayList<HeaderProperty>(); headerPropertyArrayList.add(new HeaderProperty("Connection", "close")); transportSE.call(null, envelope,headerPropertyArrayList);
之前遇到这个问题的时候,一直没有解决,都是使用第一种办法先过渡的,现在解决了,记录一下。