16

Android 3.0 アプリでNetworkOnMainThreadExceptionが発生しました。これを見つけた解決策を探していますが、これを正しく理解していれば、デフォルト設定では厳密モードはオフになっています。

また、すべてのネットワーク アクセスが にあるAsyncTaskため、とにかくこの例外の意味がわかりません。

では、これを防ぐにはどうすればいいのか、今とても必死です...

よろしく、クラゲ

編集:

このブログ エントリは、AsyncTask で十分であると述べていますが、少なくとも StrictMode ポイントを明確にしています。

解決:

StrictMode をオフにしました (おそらくいくつかの設定を保持した方がよいでしょうが、気にすることはできませんでした...):

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

その後、「java.lang.RuntimeException: This thread forbids HTTP requests」に遭遇しましたが、こちらで解決策を見つけました。AndroidHttpClientAndroid 2.0以降のアプリで使用したときはうまくいったので、少し混乱しています...

ソリューション、パート 2

結局のところ、AsyncTask を使用するのは良いアイデアでしたが、間違った使い方をするとまったく役に立ちませんでした。つまり、strict モードの反応には何の問題もありませんでした。聞くべきでしたか?;)

デフォルトで Honeycomb で有効になっていることを知っておくとよいでしょう。

4

2 に答える 2

14

Android Honeycomb StrictMode が有効になっている場合は、 onCreate() 関数にコードを追加してオフにします...

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main);       
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
于 2011-11-02T19:50:47.253 に答える