2012-12-07 110 views
0

我嘗試在我的Android應用程序中加載xml文件。當運行userList.setInput(xmlUrl.openStream(),null);我看到消息「The Application has stoped unexpected」。從android網站加載XML

URL xmlUrl = null; 
       String tmp = ""; 
       Log.d(LOG_TAG, "BUTTON IS ON"); 

       try { 
        xmlUrl = new URL("http://55.55.55.55/1.xml"); 
        Log.d(LOG_TAG, "1"); 
       } catch (MalformedURLException e) {    
        e.printStackTrace(); 
       } 
       XmlPullParser userList = null; 
       try { 
        userList = XmlPullParserFactory.newInstance().newPullParser(); 
        Log.d(LOG_TAG, "2"); 
       } catch (XmlPullParserException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       try { 
        userList.setInput(xmlUrl.openStream(), null); 
        Log.d(LOG_TAG, "3"); 
       } catch (XmlPullParserException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
        Log.d(LOG_TAG, "3x"); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
        Log.d(LOG_TAG, "3y"); 
       } 

我做錯了什麼? 在日誌中我看到:

12-07 11:53:33.712: DEBUG/dalvikvm(263): GC_EXPLICIT freed 3K, 11% free 17590K/19719K, paused 3ms+4ms 
12-07 11:53:33.892: INFO/ActivityManager(88): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.hotdog_master/.MainActivity } from pid 263 
12-07 11:53:33.892: WARN/WindowManager(88): Failure taking screenshot for (230x135) to layer 21005 
12-07 11:53:33.952: INFO/ActivityManager(88): Start proc com.example.hotdog_master for activity com.example.hotdog_master/.MainActivity: pid=778 uid=10036 gids={3003} 
12-07 11:53:35.682: INFO/ActivityManager(88): Displayed com.example.hotdog_master/.MainActivity: +1s746ms 
12-07 11:53:36.714: DEBUG/dalvikvm(263): GC_EXPLICIT freed 7K, 11% free 17592K/19719K, paused 3ms+4ms 
12-07 11:53:39.112: DEBUG/AndroidRuntime(778): Shutting down VM 
12-07 11:53:39.112: WARN/dalvikvm(778): threadid=1: thread exiting with uncaught exception (group=0x40014760) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778): FATAL EXCEPTION: main 
12-07 11:53:39.122: ERROR/AndroidRuntime(778): android.os.NetworkOnMainThreadException 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1077) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at dalvik.system.BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:368) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:208) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:431) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at java.net.Socket.connect(Socket.java:901) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:75) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:48) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:304) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:89) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:292) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:274) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1038) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:523) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at java.net.URL.openStream(URL.java:645) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at com.example.hotdog_master.MainActivity.Xmlworker(MainActivity.java:72) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at com.example.hotdog_master.MainActivity$1.onClick(MainActivity.java:37) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at android.view.View.performClick(View.java:3110) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at android.view.View$PerformClick.run(View.java:11934) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at android.os.Handler.handleCallback(Handler.java:587) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at android.os.Handler.dispatchMessage(Handler.java:92) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at android.os.Looper.loop(Looper.java:132) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at android.app.ActivityThread.main(ActivityThread.java:4123) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at java.lang.reflect.Method.invoke(Method.java:491) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
12-07 11:53:39.122: ERROR/AndroidRuntime(778):  at dalvik.system.NativeStart.main(Native Method) 
12-07 11:53:39.142: WARN/ActivityManager(88): Force finishing activity com.example.hotdog_master/.MainActivity 
12-07 11:53:39.142: WARN/WindowManager(88): Failure taking screenshot for (230x135) to layer 21010 
12-07 11:53:39.662: WARN/ActivityManager(88): Activity pause timeout for ActivityRecord{407709a8 com.example.hotdog_master/.MainActivity} 
12-07 11:53:50.532: WARN/ActivityManager(88): Activity destroy timeout for ActivityRecord{407709a8 com.example.hotdog_master/.MainActivity} 

回答

0

有兩個這個問題的解決方案,但第一個是很好的解決方案。

1)不要在主UI線程中使用異步任務編寫網絡調用。

2)在setContentView(R.layout.activity_main);之後將代碼寫入您的MainActivity文件中,但這不是正確的方法。

if (android.os.Build.VERSION.SDK_INT > 9) { 
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 
} 

和下面的import語句放到你的java文件中。

import android.os.StrictMode; 

並參見下面的鏈接瞭解更多信息。

Caused by: android.os.NetworkOnMainThreadException

0

試着做分析在另一個線程以外主線程。您可以使用Async Task並在doInBackground()方法中解析xml。

0

的問題不在於你做你解析在主線程,但是你做的主線程上的網絡電話! 使用異步任務或線程