「AsyncTask」利用:android.os.NetworkOnMainThreadExceptionエラーへの対応方法

「android.os.NetworkOnMainThreadException」はメインスレッドでネットワーク連携などをやるとandroidosのバージョンが3.0以上だったら起こるようになっているようです。androidos2.3とかのスマホを所有していて、テストでは起こらなかったけど配布してユーザーからの報告で築くということがると思います。

AndroidはGingerBreadで追加になった「StrictMode」が3.0以降はデフォルトで有効になっており、メインスレッド(UIスレッド)でネットワーク処理を行うと同例外がスローされるのである。

要は、サーバーとの連携などするときは、「AsyncTask」を継承した内部クラスを作って、そこでネットワークの処理を実行させなくてはならないということ。Android4.0以降であればローダー(AsyncTaskLoader)を使ってもいいらしい。

public class MainActivity extends Activity{

public void onCreate(Bundle savedInstanceState) {

AsyncCl aul = new AsyncCl(this);
aul.execute();

}

class AsyncCl extends AsyncTask<String, Void, String> {
public AsyncUrlConn(Context context){
this.context = context;
}

protected String doInBackground(String… params) {

}

protected void onPostExecute(String json) {

}

}

もっと簡単な方法としては、テスト用には

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です