我尝试在AsyncTask中解析一个大的xml文档。FeinstaubActivity开始,但我只看到一个黑屏,然后回到RSSReaderActivity,从那里我开始了另一个活动。
日志:DEBUG/SntpClient(58): request time failed: java.net.SocketException: Address family not supported by protocol
WARN/KeyCharacterMap(623): No keyboard for id 0
WARN/KeyCharacterMap(623): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
INFO/ActivityManager(58): Starting activity: Intent { cmp=de.test.testapp/.FeinstaubActivity }
DEBUG/AndroidRuntime(623): Shutting down VM
WARN/dalvikvm(623): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
WARN/dalvikvm(623): threadid=7: thread exiting with uncaught exception (group=0x4001d800)
INFO/Process(623): Sending signal. PID: 623 SIG: 9
INFO/ActivityManager(58): Process de.test.testapp (pid 623) has died.
INFO/WindowManager(58): WIN DEATH: Window{4402be18 AtchDlg:de.test.testapp/de.test.testapp.RSSReaderActivity paused=false}
INFO/WindowManager(58): WIN DEATH: Window{4400dd68 de.test.testapp/de.test.testapp.RSSReaderActivity paused=false}
INFO/ActivityManager(58): Start proc de.test.testapp for activity de.test.testapp/.RSSReaderActivity: pid=631 uid=10035 gids={3003}
DEBUG/dalvikvm(32): GC_EXPLICIT freed 299 objects / 11488 bytes in 162ms
INFO/UsageStats(58): Unexpected resume of de.test.testapp while already resumed in de.test.testapp
DEBUG/dalvikvm(32): GC_EXPLICIT freed 57 objects / 2440 bytes in 138ms
INFO/ActivityManager(58): Displayed activity de.test.testapp/.RSSReaderActivity: 411 ms (total 532 ms)
DEBUG/dalvikvm(32): GC_EXPLICIT freed 2 objects / 48 bytes in 126ms
DEBUG/dalvikvm(631): GC_FOR_MALLOC freed 3294 objects / 461928 bytes in 72ms
DEBUG/dalvikvm(631): GC_FOR_MALLOC freed 2750 objects / 557024 bytes in 59ms
DEBUG/dalvikvm(631): GC_FOR_MALLOC freed 2786 objects / 506288 bytes in 60ms
WARN/InputManagerService(58): Got RemoteException sending setActive(false) notification to pid 623 uid 10035
代码 Document document = null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.feinstaub);
document = (Doxument) new ParseXMLFile().execute();
}
private class ParseXMLFile extends AsyncTask<Integer, Integer, Document>{
@Override
protected Document doInBackground(Integer... params) {
Document parsedXML = null;
try {
parsedXML = builder.parse(getApplicationContext().getResources().openRawResource(R.raw.finedust));
} catch (NotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return parsedXML;
}
}
的问候浮动
啊,不确定你能做到:http://developer.android.com/reference/android/os/AsyncTask.html显示execute返回void。
你想要这个:
Document document = null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.feinstaub);
new ParseXMLFile().execute();
}
void setDocument(Document document){ this.document = document; }
private class ParseXMLFile extends AsyncTask<Integer, Integer, Document>{
@Override public void onPostExecute(Document d){ setDocument(d); }
@Override
protected Document doInBackground(Integer... params) {
Document parsedXML = null;
try {
parsedXML = builder.parse(getApplicationContext().getResources().openRawResource(R.raw.finedust));
} catch (NotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return parsedXML;
}
}
有一点你需要做的范围:传递父活动或声明setDocument
方法适当地以某种方式,所以你可以从AsyncTask内部调用它,但类似的东西应该做它。