在学Android,我通过org.apache.http 和 SAX 请求服务器并解析一个返回的xml。
比如返回以下一个XML,我通过一个url参数count控制返回review的数量<?xml version="1.0" encoding="UTF-8"?>
<reviews>
<review>
<timestamp_id>动态记录Id</timestamp_id>
<created_at>创建时间</created_at>
<id>评论ID</id>
<content>内容</content>
<img>用户拍摄的图片</img>
<type>评论类型(0为详细评论,1为简评,2为签到)</type>
<user>
<id>用户ID</id>
<name>用户名</name>
<face_pic>头像地址</face_pic>
</user>
<product>
<id>产品ID</id>
<name>产品名称</name>
<img>产品图片</img>
</product>
</review>
<review>
<timestamp_id>动态记录Id</timestamp_id>
<created_at>创建时间</created_at>
<id>评论ID</id>
<content>内容</content>
<img>用户拍摄的图片</img>
<type>评论类型(0为详细评论,1为简评,2为签到)</type>
<user>
<id>用户ID</id>
<name>用户名</name>
<face_pic>头像地址</face_pic>
</user>
<product>
<id>产品ID</id>
<name>产品名称</name>
<img>产品图片</img>
</product>
</review>
....
</reviews>但是当count<= 9时能够正常返回,大于9时会报错误,如下
java.net.SocketException: socket closed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at org.apache.http.impl.io.AbstractSessionInputBuffer.read(AbstractSessionInputBuffer.java:187)
at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:164)
at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:138)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager$RewindableInputStream.read(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipChar(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at Miser.XMLHelper.readXml(XMLHelper.java:23)
at Miser.main.main(main.java:49)
Exception in thread "main" java.lang.NullPointerException
at Miser.main.main(main.java:65)
java.net.SocketException: socket closed不知道是何原因,求解
比如返回以下一个XML,我通过一个url参数count控制返回review的数量<?xml version="1.0" encoding="UTF-8"?>
<reviews>
<review>
<timestamp_id>动态记录Id</timestamp_id>
<created_at>创建时间</created_at>
<id>评论ID</id>
<content>内容</content>
<img>用户拍摄的图片</img>
<type>评论类型(0为详细评论,1为简评,2为签到)</type>
<user>
<id>用户ID</id>
<name>用户名</name>
<face_pic>头像地址</face_pic>
</user>
<product>
<id>产品ID</id>
<name>产品名称</name>
<img>产品图片</img>
</product>
</review>
<review>
<timestamp_id>动态记录Id</timestamp_id>
<created_at>创建时间</created_at>
<id>评论ID</id>
<content>内容</content>
<img>用户拍摄的图片</img>
<type>评论类型(0为详细评论,1为简评,2为签到)</type>
<user>
<id>用户ID</id>
<name>用户名</name>
<face_pic>头像地址</face_pic>
</user>
<product>
<id>产品ID</id>
<name>产品名称</name>
<img>产品图片</img>
</product>
</review>
....
</reviews>但是当count<= 9时能够正常返回,大于9时会报错误,如下
java.net.SocketException: socket closed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at org.apache.http.impl.io.AbstractSessionInputBuffer.read(AbstractSessionInputBuffer.java:187)
at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:164)
at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:138)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager$RewindableInputStream.read(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipChar(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at Miser.XMLHelper.readXml(XMLHelper.java:23)
at Miser.main.main(main.java:49)
Exception in thread "main" java.lang.NullPointerException
at Miser.main.main(main.java:65)
java.net.SocketException: socket closed不知道是何原因,求解
估计是socket超时,或者缓冲区的问题
import java.io.InputStream;
import java.util.List;import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;public class HttpHelper {
public static InputStream Request(String url,List<NameValuePair> parmList)
throws ClientProtocolException, IOException {
InputStream inputStream = Request(url, parmList,null);
return inputStream;
}
public static InputStream Request(String url,List<NameValuePair> parmList,HttpParams httpParameters) throws ClientProtocolException, IOException {
HttpClient httpClient = new DefaultHttpClient();
if(httpParameters == null){
httpParameters = new BasicHttpParams();
int timeoutConnection = 1000 * 10;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
}
HttpPost post = new HttpPost(url);
post.setParams(httpParameters);
if(parmList != null){
post.setEntity(new UrlEncodedFormEntity(parmList, HTTP.UTF_8));
}
HttpResponse response = httpClient.execute(post);
HttpEntity entity = response.getEntity();
InputStream instream = null;
if (entity != null) {
instream = entity.getContent();
}
post.abort();
return instream;
}
}
这个遭关了哦