[英]XMLPullParser parsing from internet in asynctask error in Android
我正在Android系統上開發一個應用程序,它涉及解析一些xml的東西。 問題是程序崩潰了,我還沒有發現問題。 我有一個Activity,它有一個擴展asynctask的私有類。 這是代碼:
URL url = new URL(XML_INIT_ADRESS);
XmlPullParser xpp = XmlPullParserFactory.newInstance().newPullParser();
xpp.setInput(url.openConnection().getInputStream(), null);
int pullParserState = xpp.getEventType();
while (pullParserState != XmlPullParser.END_DOCUMENT){
if (xpp.getName().equals("signupclients") && pullParserState == XmlPullParser.START_TAG){ //Error!!!
while(!xpp.getName().equals("signupclients") && pullParserState != XmlPullParser.END_TAG){
if (xpp.getName().equals("client")) {
clientNames.add(xpp.getAttributeValue(0));
}
pullParserState = xpp.next();
}
pullParserState = xpp.next();
}
}
正如你所看到的,我已經評論了第一個if語句,如果你發表評論,那么包含代碼的代碼就可以了。 我可以補充說它是在Eclipse中我捕獲所有錯誤。
String XML_INIT_ADRESS = "http://www.johanstenberg.se/tests/app/start.xml"
它應該是一個有效的XML文檔。 請幫助,因為我很無能,但我希望看到它與XMLPullParser一起使用。 我在onCreate()方法中調用asynctask,如下所示:
new UpdateDatabase().execute();
其中UpdateDatabase是擴展Asynctask的私有類的名稱。
提前致謝!
logcat的:
12-05 18:38:43.664: W/KeyCharacterMap(525): No keyboard for id 0
12-05 18:38:43.664: W/KeyCharacterMap(525): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
12-05 18:38:44.854: I/AndroidRuntime(525): AndroidRuntime onExit calling exit(0)
12-05 18:38:45.154: D/dalvikvm(535): GC freed 750 objects / 54888 bytes in 51ms
12-05 18:38:45.584: W/dalvikvm(535): threadid=15: thread exiting with uncaught exception (group=0x4001b188)
12-05 18:38:45.594: E/AndroidRuntime(535): Uncaught handler: thread AsyncTask #1 exiting due to uncaught exception
12-05 18:38:45.604: E/AndroidRuntime(535): java.lang.RuntimeException: An error occured while executing doInBackground()
12-05 18:38:45.604: E/AndroidRuntime(535): at android.os.AsyncTask$3.done(AsyncTask.java:200)
1 2-05 18:38:45.604: E/AndroidRuntime(535): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
12-05 18:38:45.604: E/AndroidRuntime(535): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
12-05 18:38:45.604: E/AndroidRuntime(535): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
12-05 18:38:45.604: E/AndroidRuntime(535): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-05 18:38:45.604: E/AndroidRuntime(535): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
12-05 18:38:45.604: E/AndroidRuntime(535): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
12-05 18:38:45.604: E/AndroidRuntime(535): at java.lang.Thread.run(Thread.java:1096)
12-05 18:38:45.604: E/AndroidRuntime(535): Caused by: java.lang.NullPointerException
12-05 18:38:45.604: E/AndroidRuntime(535): at com.discountapp.johanaugust.UpdatingDB$UpdateDatabase.doInBackground(UpdatingDB.java:119)
12-05 18:38:45.604: E/AndroidRuntime(535): at com.discountapp.johanaugust.UpdatingDB$UpdateDatabase.doInBackground(UpdatingDB.java:1)
12-05 18:38:45.604: E/AndroidRuntime(535): at android.os.AsyncTask$2.call(AsyncTask.java:185)
12-05 18:38:45.604: E/AndroidRuntime(535): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
12-05 18:38:45.604: E/AndroidRuntime(535): ... 4 more
12-05 18:38:45.654: I/dalvikvm(535): threadid=7: reacting to signal 3
12-05 18:38:45.654: E/dalvikvm(535): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
如果您從此行獲得例外:
if(xpp.getName().equals("signupclients") && pullParserState == XmlPullParser.START_TAG)
然后我最好的猜測是xpp.getName()返回null ,並且您嘗試從該null引用調用.equals()
。
您應該在嘗試使用XmlPullParser之前檢查eventType 。 看一下JavaDoc中的這個片段:
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if(eventType == XmlPullParser.START_DOCUMENT) {
System.out.println("Start document");
} else if(eventType == XmlPullParser.START_TAG) {
System.out.println("Start tag "+xpp.getName());
} else if(eventType == XmlPullParser.END_TAG) {
System.out.println("End tag "+xpp.getName());
} else if(eventType == XmlPullParser.TEXT) {
System.out.println("Text "+xpp.getText());
}
eventType = xpp.next();
}
沒有更多細節(如堆棧跟蹤)很難給出更明確的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.