2012-02-26 1 views
0

次の関数を使用して、PHP WebページからJSON配列を取得しています。Gingerbreadで働いているアプリケーションがHoneycombでNetworkOnMainThreadExceptionをスローする

この正確なコードは、私が現在ビルドしている3.0バージョンのアプリケーションの2.3バージョンで動作しますが、強制終了して奇妙なエラーログが表示されます。

すべてのヘルプは素晴らしいことだ...

は、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)以来のことです。そのため、以前はそれを取得していなかったのです。また、「応答性の設計」ページにリンクしています。ネットワークオペレーションを行うための適切な方法は、コメント者の中にはAsyncTaskを介して提案されているものもあります。

+0

イェップ、私は今それをやっています。答える時間をとってくれてありがとう。 – Eugen

関連する問題