1

URLからjsonデータをプルしようとすると、「android.os.networkonmainthreadexception」というエラーが発生します。理由を教えてもらえますか?

4

1 に答える 1

1

これはStrictMode.ThreadPolicyによるものです。これは、APIレベル9以降に導入され、APIレベル11以降、デフォルトのスレッドポリシーが変更されました。つまり、ネットワーク操作(HttpClientやHttpUrlConnectionなど)をUIスレッドで実行することはできません。これを行うと、NetworkOnMainThreadExceptionが発生します。

これを解決するための推奨される方法は、ネットワーク要求がUIスレッドをブロックしないようにAsyncTaskを使用することです。

以下のコードをメインアクティビティのonCreate()メソッドに追加することで、このスレッドポリシーをオーバーライドできます。

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = 
        new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}
于 2012-09-24T22:00:42.413 に答える