9

NetworkOnMainThreadExceptionをスローするサードパーティのオープンソースプログラムを実行する必要があります。SDKリファレンスによると、これはHoneycombSDK以降を対象とするアプリケーションに対してのみスローされます。以前のSDKバージョンを対象とするアプリケーションは、メインイベントループスレッドでネットワーキングを行うことができます。

最初の段階では、ソースを変更せずにプログラムを実行したいだけです。そこで、AndroidManifesr.xmlの行を次のように変更しました。

    android:targetSdkVersion = "15"

に:

    android:targetSdkVersion = "10"

ただし、これは役に立ちません。プログラムは引き続きNetworkOnMainThreadExceptionをスローします。どうすればこれを機能させることができますか?Android Emulation Google API(レベル16)でプログラムを実行しようとしています。

4

3 に答える 3

21

次のように変更できます。

android:targetSdkVersion="9"

API 10はハニカムに対応し、9はジンジャーブレッドに対応します。この動作は、API10以降でのみ見られます。

しかし、私はこれに反対することをお勧めします。代わりに、長時間実行される操作、または長時間実行される可能性のある操作を、AsyncTaskなどのバックグラウンドスレッドに移動する必要があります。

次を使用して、厳密モードをオフに設定することもできます。

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
于 2012-09-29T07:46:17.180 に答える
4

UIスレッドでネットワークタスクを実行しています。ネットワーク操作を実行する最良の方法は、AsyncTaskを使用するか、単に別のスレッドを作成することです。ただし、エラーを取り除くための迅速で汚い方法が必要な場合は、これも使えます

ThreadPolicy tp = ThreadPolicy.LAX;
StrictMode.setThreadPolicy(tp);
于 2012-09-29T07:49:24.030 に答える
0

これらは解決策ではありません、あなたはただtutelarに寝て敷居をするように言います!!! androidは、メインスレッド(UIスレッド)でネットワーク操作を行わないようにすることを決定します。これは、これらの操作によって「停止」が発生する可能性があるためです(UI停止が応答します)。だから、私が読んだように、彼らはあなたにあなたの足を撃たないようにあなたに言います、そしてあなたはそうする方法を見つけます!!!

解決策:分離されたスレッド、または非同期..。

于 2013-12-04T23:17:48.470 に答える