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");        
}

コードはかなり自明だと思います。渡すタイプをオブジェクトだけに変更して、必要に応じてタイプキャストしてみましたが、どちらも機能しませんでした。

私が知っておくべきSDKに文書化されていないものはありますか?

4

1 に答える 1

1

明らかに、クラッシュ.. MainUI Threadで長い(ネットワーク関連の可能性もある)操作を行っています。現在onPostExecute()AsyncTaskは MainUI スレッドでのみ実行されます。そのため、常に に保管してdoInBackground()ください。

このコード行はAsyncTasknew ParseXml(result); にある必要があります。doInBackground()

アップデート:

そのため、アプリケーション UI に更新を反映させたい場合のみ、XML の解析を完了しdoInBackground()、結果のみを に渡します。onPostExecute()

于 2012-09-17T11:35:10.060 に答える