2012-02-26 63 views
0

我使用以下函數從php網頁獲取JSON數組。在薑餅的應用程序工作,在Honeycomb中拋出NetworkOnMainThreadException

雖然這個確切的代碼適用於2.3版本的應用程序,但在我目前正在構建的3.0版本中,它強制關閉並給了我一個奇怪的錯誤日誌。

任何幫助將是巨大的......

是否有任何特殊性,以蜂窩,而不是使用http帖子之類的東西時,薑餅?

private void getNews(){ 
    try{ 
    HttpGet httpGet = new HttpGet("http://www.ace.ucv.ro/android/stiri.php?perpage=20"); 

    result = EntityUtils.toString(new DefaultHttpClient().execute(httpGet).getEntity()); 

    JSONArray jsonMainArray = new JSONArray(result); 


} catch (ParseException e) { 
    e.printStackTrace(); 
} catch (ClientProtocolException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 
} 

並調用函數:

 getNews.setOnClickListener(new OnClickListener(){ 
     public void onClick(View view){ 
      getNews(); 
     } 
    }); 

和錯誤日誌

02-26 16:06:42.218: W/dalvikvm(478): threadid=1: thread exiting with uncaught exception (group=0x40014760) 
02-26 16:06:42.247: E/AndroidRuntime(478): FATAL EXCEPTION: main 
02-26 16:06:42.247: E/AndroidRuntime(478): android.os.NetworkOnMainThreadException 
02-26 16:06:42.247: E/AndroidRuntime(478): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1077) 
02-26 16:06:42.247: E/AndroidRuntime(478): at java.net.InetAddress.lookupHostByName(InetAddress.java:477) 
02-26 16:06:42.247: E/AndroidRuntime(478): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:277) 
02-26 16:06:42.247: E/AndroidRuntime(478): at java.net.InetAddress.getAllByName(InetAddress.java:249) 
02-26 16:06:42.247: E/AndroidRuntime(478): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136) 
02-26 16:06:42.247: E/AndroidRuntime(478): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
02-26 16:06:42.247: E/AndroidRuntime(478): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
02-26 16:06:42.247: E/AndroidRuntime(478): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
02-26 16:06:42.247: E/AndroidRuntime(478): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
02-26 16:06:42.247: E/AndroidRuntime(478): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
02-26 16:06:42.247: E/AndroidRuntime(478): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
02-26 16:06:42.247: E/AndroidRuntime(478): at pirelli.app.ScanBarcode.getNews(ScanBarcode.java:46) 
02-26 16:06:42.247: E/AndroidRuntime(478): at pirelli.app.ScanBarcode.access$4(ScanBarcode.java:42) 
02-26 16:06:42.247: E/AndroidRuntime(478): at pirelli.app.ScanBarcode$5.onClick(ScanBarcode.java:164) 
02-26 16:06:42.247: E/AndroidRuntime(478): at android.view.View.performClick(View.java:3110) 
02-26 16:06:42.247: E/AndroidRuntime(478): at android.view.View$PerformClick.run(View.java:11934) 
02-26 16:06:42.247: E/AndroidRuntime(478): at android.os.Handler.handleCallback(Handler.java:587) 
02-26 16:06:42.247: E/AndroidRuntime(478): at android.os.Handler.dispatchMessage(Handler.java:92) 
02-26 16:06:42.247: E/AndroidRuntime(478): at android.os.Looper.loop(Looper.java:132) 
02-26 16:06:42.247: E/AndroidRuntime(478): at android.app.ActivityThread.main(ActivityThread.java:4123) 
02-26 16:06:42.247: E/AndroidRuntime(478): at java.lang.reflect.Method.invokeNative(Native Method) 
02-26 16:06:42.247: E/AndroidRuntime(478): at java.lang.reflect.Method.invoke(Method.java:491) 
02-26 16:06:42.247: E/AndroidRuntime(478): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
02-26 16:06:42.247: E/AndroidRuntime(478): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
02-26 16:06:42.247: E/AndroidRuntime(478): at dalvik.system.NativeStart.main(Native Method) 
+0

不以正確的格式返回JSON。使其正確,我認爲你應該使用CDATA,只要你想返回HTML字符串作爲迴應。 – 2012-02-26 14:20:06

+0

懶得在google上搜索'android.os.NetworkOnMainThreadException'? – Selvin 2012-02-26 14:23:05

+0

我會嘗試,但我仍然不明白如何完全相同的代碼適用於我的薑餅應用程序已經出來,功能... – Eugen 2012-02-26 14:23:17

回答

3

如果您在El goog尋找 「NetworkOnMainThreadException」,你得到的第一件事情就是鏈接Android docs。它聲明這個異常是從Api Level 11(Honeycomb 3.0)開始的,這就是爲什麼你之前沒有得到它。它甚至鏈接到「響應性設計」頁面。正如一些評論者所建議的那樣,進行網絡操作的正確方法是通過AsyncTask。

+0

Yeap,我現在就這樣做。感謝您花時間回答。 – Eugen 2012-02-26 15:01:06

相關問題