2016-05-03 26 views
0

私はAndroidアプリケーションにAsyncTask<Task, Void, Boolean>スレッドを持っています。そして、このスレッドが実行を完了すると、Toast.makeText()によってメッセージを表示したいと思います。このために私はToask.makeText()ifelseの中にdoInBackgroundの方法で追加しました。スレッドは実行を完了していますが、トーストのメッセージは表示されません。それでは、何が問題なのでしょうか?スレッドの実行完了時にトーストが表示されない

コード:メインスレッド

@Override 
    protected Boolean doInBackground(Task... arg0) { 
     try { 

      Task task = arg0[0]; 

      QueryBuilder qb = new QueryBuilder(); 

      HttpClient httpClient = new DefaultHttpClient(); 
      HttpPost request = new HttpPost(qb.buildContactsSaveURL()); 

      StringEntity params =new StringEntity(qb.createTask(task)); 
      request.addHeader("content-type", "application/json"); 
      request.setEntity(params); 
      HttpResponse response = httpClient.execute(request); 

      if(response.getStatusLine().getStatusCode()<205) 
      { 
       /*this is the message inside if*/ 
       Toast.makeText(context, "inside -IF", Toast.LENGTH_SHORT).show(); 
       return true; 
      } 
      else 
      { 
       /*this is the message inside else*/ 
       Toast.makeText(context, "inside -ELSE", Toast.LENGTH_SHORT).show(); 
       return false; 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
     } 
    } 
+0

[doInBackgroundのAsyncTaskでトーストを表示する方法](0120-1790351/how-to-show-toast-in-asynctask-in-doinbackground) –

答えて

3

トーストの仕事はあなたがバックグラウンドスレッド(doInBackground)でトーストを表示しようとしています。トーストコードを callabackに移動すると、トーストが表示されます。

+0

どのように呼び出すことができますかonPostExecutionメソッド?これを行うためのコードを示してください。 –

+0

私が重複としてマークした質問を見る –

0

実行中のタスクはバックグラウンドで実行されているため、バックグラウンドで実行されているトーストは表示されません。 バックグラウンドタスクは、UIまたはメインスレッドに影響しません。

0

スレッドが正常にその実行を完了しているが、doInBackground方法は、非UIスレッド上で実行されるためトーストの メッセージが

を表示されません。アプリケーションはアラート、トースト、およびUIスレッドのUIエレメントの更新のみを表示します。

runOnUiThreadメソッド内doInBackgroundラップトースト関連のコードからトーストを表示するには

OR

doInBackgroundメソッドからの戻りresponseとトーストを表示するonPostExecuteメソッドを使用します。

0

他の人に言われているように、バックグラウンドスレッドでは、UIに関連する変更やアクティビティはありません。 onPostExecuteメソッドが行うメインスレッドで行います。ここでは例として、あなたのコードを使用して

private class DoSomethingTask extends AsyncTask<Void, Void, Void> { 
    @Override 
    protected Void doInBackground(Void... params) { 
     //Do background process here. Make sure there are no UI related changes here 
     return null; 
    } 

    protected void onPostExecute(Void x) 
    { 
     //Do UI related changes here 
    } 
} 

です:

private class DoSomethingTask extends AsyncTask<Void, Void, Void> { 
    int statusCode; 
    @Override 
    protected Void doInBackground(Task... arg0) { 
     try { 

     Task task = arg0[0]; 

     QueryBuilder qb = new QueryBuilder(); 

     HttpClient httpClient = new DefaultHttpClient(); 
     HttpPost request = new HttpPost(qb.buildContactsSaveURL()); 

     StringEntity params =new StringEntity(qb.createTask(task)); 
     request.addHeader("content-type", "application/json"); 
     request.setEntity(params); 
     HttpResponse response = httpClient.execute(request); 
     statusCode = response.getStatusLine().getStatusCode(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
     } 
    } 

    protected void onPostExecute(Void x) 
    { 
     //Do UI related changes here 

     if(statusCode < 205) 
     { 
      /*this is the message inside if*/ 
      Toast.makeText(context, "inside -IF", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
     else 
     { 
      /*this is the message inside else*/ 
      Toast.makeText(context, "inside -ELSE", Toast.LENGTH_SHORT).show(); 
      return false; 
     } 
    } 
} 

は、この情報がお役に立てば幸い!

関連する問題