2012-02-26 3 views
0

다음 함수를 사용하여 PHP 웹 페이지에서 JSON Array를 가져옵니다.Gingerbread에서 작동하는 앱이 Honeycomb에서 NetworkOnMainThreadException을 throw합니다.

이 정확한 코드는 앱의 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을 적절한 형식으로 반환하지 않습니다. 올바른지 확인하십시오. 응답 할 때 HTML 문자열을 반환 할 때마다 CDATA를 사용해야합니다. –

+0

Google에서 'android.os.NetworkOnMainThreadException'을 (를) 너무 게으른 것으로 찾으십니까? – Selvin

+0

나는 그것을 시도 할 것이다. 그러나 나는 아직도 똑같은 코드가 내 진저 브레드 앱에서 어떻게 작동하고 작동하는지 이해하지 못한다 ... – Eugen

답변

3

당신이 엘 GOOG에 "NetworkOnMainThreadException"을 찾았다 경우를, 당신이 얻을 제일 먼저 링크입니다 Android docs. 그것은이 예외가 Api Level 11 (Honeycomb 3.0) 이후라고 말합니다. 그래서 전에는 그것을 얻지 못했습니다. 또한 "Designing for Responsiveness (응답 성 설계)"페이지로 연결됩니다. 네트워크 작업을 수행하는 적절한 방법은 주석 기자 중 일부처럼 AsyncTask를 사용하는 것입니다.

+0

Yeap, 지금하고 있습니다. 대답 할 시간을내어 주셔서 감사합니다. – Eugen