2014年2月3日月曜日

HTTP通信でNetworkOnMainThreadException発生

昔作成したコードを動かしてみたら、NetworkOnMainThreadExceptionが発生した。
昔は問題なく動作していたにも関わらず、だ。

原因は、Android 3.0からインターネット通信はUIスレッドでは行えなくなっている様子。

AsyncTaskか、AsyncTaskLoaderを使用しなくてはならないらしい。
Android4.0以降であれば、AsyncTaskLoaderがよいと思われる。

一時的に、下記のコードを埋め込んでおけば、例外を抑制できる。
埋め込む場所は、UIスレッドのonCreateメソッド開始直後、super.onCreateメソッド実行前。

  1. StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitAll().build());  

0 件のコメント:

コメントを投稿