0
@Override 
protected InputStream doInBackground(String... url){                
    try {
        InputStream stream = downloadXml(url[0]);
        new ParseXml(stream); //for testing porpuses: outputs ok to logcat
        return stream;
    } catch (IOException e) {
        Log.d("dbg","exception");   
        e.printStackTrace();
        return null;
    }   
}

@Override 
protected void onPostExecute(InputStream result) {
    if (result != null) {    
       new ParseXml(result); //crashes the app                  
    }
    Log.d("dbg","postexecute triggered ok");        
}

我认为代码很容易解释,我尝试将传递类型更改为 Object 并在需要的地方进行类型转换,但它也没有工作。

我应该知道 sdk 中是否有任何未记录的内容?

4

1 回答 1

1

显然,Crash ..您正在MainUI Thread中进行冗长的(也可能与网络相关的)操作。从AsyncTask开始,仅在 In MainUI Thread 上运行onPostExecute()。所以总是把它放在. doInBackground()

此代码行new ParseXml(result); 应位于doInBackground()AsyncTask

更新:

因此,如果您只想在应用程序 UI 上反映更新,请完成 XML 的解析doInBackground()并仅将结果传入。onPostExecute()

于 2012-09-17T11:35:10.060 回答