Java 任务永远不会结束
我试图在异步任务上获取xml文件,并在ListActivity上显示结果 问题是,对于debug,当我到达行“doc=db.parse(xml);”时,系统挂起,永远不会回来 在活动线程上执行“暂停”,并显示以下堆栈跟踪 堆栈跟踪Java 任务永远不会结束,java,android,android-asynctask,Java,Android,Android Asynctask,我试图在异步任务上获取xml文件,并在ListActivity上显示结果 问题是,对于debug,当我到达行“doc=db.parse(xml);”时,系统挂起,永远不会回来 在活动线程上执行“暂停”,并显示以下堆栈跟踪 堆栈跟踪 OSNetworkSystem.read(FileDescriptor, byte[], int, int) line: not available [native method] BlockGuard$WrappedNetworkSystem.read(File
OSNetworkSystem.read(FileDescriptor, byte[], int, int) line: not available [native method]
BlockGuard$WrappedNetworkSystem.read(FileDescriptor, byte[], int, int) line: 273
PlainSocketImpl.read(byte[], int, int) line: 458
SocketInputStream.read(byte[], int, int) line: 85
SocketInputBuffer(AbstractSessionInputBuffer).fillBuffer() line: 103
SocketInputBuffer(AbstractSessionInputBuffer).read() line: 120
ChunkedInputStream.getChunkSize() line: 211
ChunkedInputStream.nextChunk() line: 183
ChunkedInputStream.read(byte[], int, int) line: 155
EofSensorInputStream.read(byte[], int, int) line: 159
InputStreamReader.read(char[], int, int) line: 255
KXmlParser.peek(int) line: 925
KXmlParser.pushText(int, boolean, boolean) line: 875
KXmlParser.nextImpl() line: 354
KXmlParser.nextToken() line: 1399
DocumentBuilderImpl.parse(XmlPullParser, DocumentImpl, Node, int) line: 359
我的android模拟器使用代理运行,工作正常(在浏览器上测试)。
尝试了一个很小的xml,但不太管用
上面是我的档案
my basic.java
public class Basic {
public InputStream getmyPStXML(String url)
{
InputStream xml = null;
String dstUrl = "http://mypst.com.br" + url;
try
{
// defaultHttpClient
HttpParams params = new BasicHttpParams();
params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(dstUrl);
request.setHeader("User-Agent", "set your desired User-Agent");
HttpResponse httpResponse = httpClient.execute(request);
xml = httpResponse.getEntity().getContent();
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
catch (ClientProtocolException e)
{
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
// return XML
return xml;
}
public Document getDomElement(InputStream xml)
{
Document doc = null;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try
{
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(xml);
}
catch (ParserConfigurationException e)
{
Log.e("Error: ", e.getMessage());
return null;
}
catch (SAXException e)
{
Log.e("Error: ", e.getMessage());
return null;
}
catch (IOException e)
{
Log.e("Error: ", e.getMessage());
return null;
}
return doc;
}
}
my GetUserGames.java
public class GetUserGames extends ListActivity {
static final String KEY_JOGOS = "jogos";
static final String KEY_JOGO = "jogo";
static final String KEY_PIC = "pic";
static final String KEY_PIC_BIG = "pic_big";
static final String KEY_NAME = "name";
private ProgressDialog m_ProgressDialog = null;
public class getUserGamesASYNC extends AsyncTask<String, Void, Document>
{
public Document getUserGames(String username)
{
Basic b = new Basic();
InputStream xml = b.getmyPStXML("/rank/" + username + "/xml/");
return b.getDomElement(xml);
}
protected Document doInBackground(String... username) {
return getUserGames(username[0]);
}
}
}
公共类GetUserGames扩展了ListActivity{
静态最终字符串键\u JOGOS=“JOGOS”;
静态最终字符串键\u JOGO=“JOGO”;
静态最终字符串键\u PIC=“PIC”;
静态最终字符串键\u PIC\u BIG=“PIC\u BIG”;
静态最终字符串键\u NAME=“NAME”;
private ProgressDialog m_ProgressDialog=null;
公共类getUserGamesASYNC扩展异步任务
{
公共文档getUserGames(字符串用户名)
{
基本b=新的基本();
InputStream xml=b.getmyPStXML(“/rank/”+username+“/xml/”);
返回b.getdoElement(xml);
}
受保护文档doInBackground(字符串…用户名){
返回getUserGames(用户名[0]);
}
}
}
您可以尝试将以下内容放入getmyPStXML()
:
而不是
xml = httpResponse.getEntity().getContent();
并查看服务器返回的内容,因为根据堆栈跟踪,并没有足够的数据从服务器读取
它还有助于设置连接/数据接收超时,因为否则,应用程序将等待服务器的答复很长时间,并且可能会显示为已停止或挂起
xml = httpResponse.getEntity().getContent();