然而将解析操作写在doInBackground方法中不会报错。
走同样的路,发现不同的人生
是這樣的,樓主的result(InputStream) 是指向遠端資源的InputStream,此時對該InputStream讀取數據,都相當於讀取遠端的資源,所以會報錯。究其根本,在於Android對於「主執行緒中無法執行網路請求」的限制是整個資料流程,而非僅限制在連線時((HttpURLConnection)url.openConnection())。
所以建議做法是整個InputStream的解析都放在doInBackground裡,然後在doInBackground中傳回一個符合業務邏輯的實體類別。
解析是個耗時操作,應該放在子執行緒,onPostExecute是主线程,doInBackground是子執行緒.
onPostExecute
doInBackground
你在主執行緒做了耗時操作,報錯了很正常.
你應該把InputStream 換成取得到的資料 String
接著在onPostExecute()中解析
是這樣的,樓主的result(InputStream) 是指向遠端資源的InputStream,此時對該InputStream讀取數據,都相當於讀取遠端的資源,所以會報錯。究其根本,在於Android對於「主執行緒中無法執行網路請求」的限制是整個資料流程,而非僅限制在連線時((HttpURLConnection)url.openConnection())。
所以建議做法是整個InputStream的解析都放在doInBackground裡,然後在doInBackground中傳回一個符合業務邏輯的實體類別。
解析是個耗時操作,應該放在子執行緒,
onPostExecute
是主线程,doInBackground
是子執行緒.你在主執行緒做了耗時操作,報錯了很正常.
你應該把InputStream 換成取得到的資料 String
接著在onPostExecute()中解析