1. ホーム
  2. android

[解決済み] Error StrictMode$AndroidBlockGuardPolicy.onNetwork [重複]。

2022-02-06 09:24:45

質問

アンドロイドのアプリケーションを作成し JSON サーバからデータを取得するのですが、以下のようなエラーが発生しました。

android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)

この問題を解決するにはどうしたらよいですか
ありがとうございました。

解決方法は?

MainActivityクラスで2行の"StrictMode"を挿入する必要があります。

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        
        try {
            // JSON here
        } catch (JSONException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }
        catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
        setContentView(R.layout.activity_main);
        Intent intent=new Intent(this,HomeActivity.class);
        startActivity(intent);
    }
}

エイ.サコン

編集 この回答は、「問題」を解決していますが、肝心の「問題」を説明していません。

StrictModeを修正することは、修正ではありません。同様にこの例外は、実際にはプログラムのロジックにおけるエラーではありません。これはプログラムパラダイムのエラーであり、例外は、UIのフリーズにつながるため、メインスレッドでhttpコールを実行すべきではないことを教えてくれます。他の回答が示唆するように、あなたはAsyncTaskクラスにhttpコールを引き渡さなければなりません。

https://developer.android.com/reference/android/os/AsyncTask

StrictModeを変更すると、アプリに「私が悪いコードを書いていることを思い出させないでください」と伝えるだけです。デバッグや、自分が何をやっているのか分かっている場合には有効ですが、一般的にはお勧めできません。