Can’t create handler inside thread that has not called Looper.prepare()

Android

Can’t create handler inside thread that has not called Looper.prepare()

表題のエラーでAndroidアプリが落ちてしまうことがあります。
UIスレッド以外から、Toastを使ったダイアログを表示していたためです。
そういう場合は、Handlerを使おうね!!という意味のエラーです。

私がやっていたのはこうでした。

 public class GetRoadTask extends AsyncTask<ArrayList<GeoPoint>, Void, Road> {
  //中略
 protected Road doInBackground(ArrayList<GeoPoint>... params) {
 
        // インターネット接続があるかどうか確認
        ConnectivityManager cm = (ConnectivityManager) localContext
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo nInfo = cm.getActiveNetworkInfo();
 
        Road road = null;
        
        if (nInfo == null) {
            
            Toast.makeText(localContext, localContext.getString(R.string.no_network), Toast.LENGTH_LONG)
                    .show(); //これがダメ!
            
        }else{
 
         //この先ネットワークがあればする処理 …
 	}
 
 	return road;
  } 
 }

気を利かせて、ネットワークがない場合は、その旨を表示しようと思っていたのですが、ダメ!!ですね。

この場合は、メインスレッドでコールバックを実装してonPostExecuteを実装していたので、そちらでroadがnullだったらメッセージを表示するように変更しました。

   //RootDisplayActivity内
   @Override
    public void postGetRoadExecute(Road road) {
        
        // プログレスダイアログを閉じる
        if (m_ProgressDialog != null){
             if(m_ProgressDialog.isShowing()) {        
                 m_ProgressDialog.dismiss();
             }
        }
        
        if(road != null){            
 
           //roadがあった時の処理
 
        }else{
            Toast.makeText(this, getString(R.string.cannot_get_root), Toast.LENGTH_LONG)
            .show();
        
        }
        
 
    }

コメントを残す

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