2014-06-14 20 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+上拋出。

此外,從任何端點獲取輸入流都需要一些時間,因爲這是網絡操作。不要指望它是通過斷點逐步完成的另一個瞬間。