14

私の活動の 1 つで、私は を使用してAsyncTaskいます。ではdoInBackground()、さまざまなメソッドを呼び出しています。これらのメソッドの 1 つで例外が発生しているため、catch ブロックでトーストにエラーを表示したいと考えています。を使用できることはわかっていますLogが、それでも私は Toast の方が好きです。では、doInBackground() の AsyncTask で Toast を使用するにはどうすればよいでしょうか?

4

9 に答える 9

17

doInBackgroundから戻る

protected String doInBackground(String... params){
    //some code
    try{
       //some code
     }catch(Exception e){
        return "Exception Caught";
     }
     return someValidResult;
}

protected void onPostExecute(String result){
    if(result.equalsIgnoreCase("Exception Caught")){
       //Display Toast
    }else{
       // // whatever you wana do with valid result
    }
}
于 2012-12-09T18:41:45.820 に答える
13

トーストをラップすることもできますがrunOnUIThread()、これは最善の解決策ではありません。
エラーが発生したときに catch ブロックでブール値フラグを設定し、フラグが のときはいつでも、、、または UI アクセスを使用するその他のメソッドのいずれかでonProgressUpdate()適切なトーストを表示する必要があります。onPostExecute()true

于 2012-12-09T18:33:10.980 に答える
6

doInBackground()メソッドでトーストを表示する必要がある場所に次のコードを記述します

runOnUiThread(new Runnable() {

public void run() {

  Toast.makeText(getApplicationContext(), "Example for Toast", Toast.LENGTH_SHORT).show();

   }
});
  • ところで: を使用している場合は、アクティビティを介してFragments呼び出す必要があります。runOnUiThread(...)

getActivity().runOnUiThread(...)

于 2013-11-20T13:37:40.240 に答える
3

ハンドラー オブジェクトを作成し、それを使用してすべての Toast メッセージを実行します。

@Override
protected Void doInBackground(Void... params) {

    Handler handler=new handler();
    handler=  new Handler(context.getMainLooper());
    handler.post( new Runnable(){
        public void run(){
            Toast.makeText(context, "Created a server socket",Toast.LENGTH_LONG).show(); 
        }
    });
  }
于 2014-06-03T08:29:59.843 に答える
3

onPreExecute()のようなUI スレッドonProgressUpdate()にアクセスできるメソッドで表示できます。onPostExecute()

于 2012-12-09T18:38:00.090 に答える
1
runOnUiThread(new Runnable() {

public void run() {

  Toast.makeText(getApplicationContext(), "Example for Toast", Toast.LENGTH_SHORT).show();

   }
}); 

doInBackground() メソッドでトーストを表示するために完全に正常に動作しています

于 2014-02-12T10:27:31.417 に答える
0

このコードを試してください

void showError(final String err) {
    runOnUiThread(new Runnable() {
        public void run() {
            Toast.makeText(downloadprogress.this, err + "error in download", Toast.LENGTH_LONG)
                    .show();
        }
    });
  }
于 2015-08-05T06:43:35.897 に答える