2014-06-14 25 views
0

我有一个应用程序,它将解析Youtube播放列表中的数据,数据格式化为XML。我正在使用SAXParser来做到这一点。但在使用SAXParser的InputStream时遇到问题。Android - InputStream总是死在前台

SAXParser saxParser = saxFactory.newSAXParser(); 
XMLReader xmlReader = saxParser.getXMLReader(); 
xmlReader.setContentHandler(this); 
URLConnection urlConnection = new URL(pURL).openConnection(); 
urlConnection.setConnectTimeout(10000); 
InputStream inputStream = urlConnection.getInputStream();/*always die here*/ 
xmlReader.parse(new InputSource(inputStream)); 

包含代码的类扩展了DefaultHandler。 使用此代码,如果我使用class DataASyn extends AsyncTask<Void, Void, Void>运行,那么运行良好,但是当我没有DataAsyn运行时,它总是如我上面所述的那样死亡。我不知道为什么 ???? 我也调试时,在后台,并认识到在InputStream inputStream = urlConnection.getInputStream();程序会暂停几秒钟,然后继续运行,也许它正在等待数据?!? 我希望以上所有的信息,任何人都会知道发生了什么,并给我任何想法。

感谢, 瑞安

+0

你正在使用哪个版本的android?当你说它“死”你的意思是ANR(崩溃应用程序不响应)? – Ryan

+0

我正在使用Android 4.0.3与Samsung Galaxy S2。 “死亡”我的意思是像你的帖子 - 崩溃出现! –

回答

0

它在你的异步任务和“死亡”的事实,否则,可能意味着你获得了NetworkOnMainThreadException。当代码在AsyncTask中执行时,它会在UI线程以外的其他线程上执行此操作。当你在AsyncTask之外运行这个代码时,可能是你的UI线程,如果我没有记错,这个异常将会在android 3.0+上抛出。

此外,从任何端点获取输入流都需要一些时间,因为这是网络操作。不要指望它是通过断点逐步完成的另一个瞬间。