27

バックグラウンドでAsyncTaskによって完了したタスクがあります。ある時点で、何かが完了したことを示すトーストを発行する必要があります。

試しましたが失敗しました Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

どうやってやるの?

4

6 に答える 6

38

onPostExecute-UIスレッドまたは publishProgress();で実行します。あなたのdoinbackgroundと

protected void onProgressUpdate(Integer... progress) {
}

http://developer.android.com/reference/android/os/AsyncTask.html

于 2010-05-14T21:40:12.647 に答える
27

doInBackground内で乾杯できます

トーストしたい場所にこのコードを追加します

runOnUiThread(new Runnable() {
public void run() {

    Toast.makeText(<your class name>.this, "Cool Ha?", Toast.LENGTH_SHORT).show();
    }
});
于 2013-04-07T18:18:24.297 に答える
20

runOnUiThreadメソッドを使用して、バックグラウンドスレッドからUIを操作することもできます。

于 2010-05-14T21:52:31.133 に答える
9

Toastを使用する場合は、次のメソッドを使用する必要があります:onProgressUpdate()

protected Integer doInBackground(Void...Params) {
   int check_point = 1;
   publishProgress(check_point);
   return check_point;
}

protected void onProgressUpdate(Integer integers) {
  if(integers == 1) {
    Toast.makeText(classname.this, "Text", 0).show(); 
}
于 2011-12-09T01:49:50.170 に答える
1

バックグラウンドスレッドからトーストを表示する場合は、doInBackgroundからrunOnUiThreadを呼び出す必要があります。別の方法があるとは思いません。

編集:私はそれを取り戻します。UIスレッドで実行されるonProgressUpdateを実装して、Toastを表示し、doInBackgroundからpublishProgressを呼び出すことができると思います。

于 2010-05-14T22:48:15.807 に答える
1

トーストをdoInBackgroundで表示する場合は、AsyncTaskのOnPostExecuteメソッドで使用できます。

protected void onPostExecute(String file_url) {    
   Toast.makeText(getApplicationContext(),"Your Message", Toast.LENGTH_LONG).show();

   pDialog.dismiss();//dismiss the progress dialouge
}
于 2016-02-05T10:11:58.773 に答える