検索プログラマのメモ帳

壁にぶつかったら検索で調べるプログラマのちょっと遅れたメモ帳。たまに自分で挑戦する。

Skip to: Content | Sidebar | Footer

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

22 10月, 2012 (09:20) | android開発 | By: admin

「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());

Write a comment