2015-12-30 41 views
0

我有一個類LoginTask它是AsyncTask的子類。我用它來執行登錄功能。只要我LoginTask看起來像這樣如何僅在完成回調函數的CallBack方法後調用onPostExecute

class LoginTask extends AsyncTask<JsonObject,Void,String>{ 
    @Override 
    protected void onPreExecute() { 
     //Codes to show progressDialog 
    } 
    @Override 
    protected String doInBackground(JsonObject... params) { 

    Ion.with(MainActivity.this) 
       .load("--URL TO POST JSON DATA--") 
       .setJsonObjectBody(params[0]) 
       .asJsonObject() 
       .withResponse() 
       .setCallback(new FutureCallback<Response<JsonObject>>() { 
        @Override 
        public void onCompleted(Exception e, Response<JsonObject> result) { 

         if (result != null) { 
          if (result.getHeaders().code() == 200) { 

           Toast.makeText(MainActivity.this, "Login Success", Toast.LENGTH_SHORT).show(); 

          } else if (result.getHeaders().code() == 401) { 
           Toast.makeText(MainActivity.this, "Invalid Username or password", Toast.LENGTH_LONG).show(); 

          } else { 
           Toast.makeText(MainActivity.this, "Something wrong check connection !!!", Toast.LENGTH_SHORT).show(); 
          } 
         } 
        } 
       }); 

     return "some message"; 

    } 

    @Override 
    protected void onPostExecute(String string) { 
     super.onPostExecute(string); 

     if(progressDialog.isShowing()){ 

      progressDialog.dismiss(); 

      //TODO Something 

     } 

    } 
} 

我想要的,什麼是事情發生了:

  • 我想只有從FutureCallback方法得到結果之後調用onPostExecute但是當我調試應用程序它是直接返回值和onPostExecute方法之前立即調用FutureCallback方法。
  • 我已經寫代碼來執行LoginTask在登錄按鈕按下事件,我想顯示ProgressDialog每次當按下按鈕時,但問題是ProgressDialog僅在第一次顯示,它沒有第二次按下按鈕時出現。
  • 我想設置一些消息給一個變量,並返回到onPostExecute方法,以便我可以根據String參數的值處理特定的任務,但是FutureCallback僅在執行完整個Task後纔會調用。

任何類型的建議將不勝感激。

+1

嘗試沒有'AsyncTask',做任何在'onCompleted' –

+0

@kishorejethava喔,我的建議對不起謝謝... –

回答

2

這裏你調用asynctask中的另一個線程。所以發生什麼事是新線程被調用的時候。 Asynctask並不等待你的離子線程完成,所以它會onPostExecute。

我認爲你不需要一個asynctask在這裏,因爲Ion已經異步地提出請求。無論你在onPostExecute()裏面做什麼,你都可以把它放在onComplete()裏面。

+0

謝謝..我想裏面執行它asynctask,因爲有很多隱藏的代碼,在爲你的答案打電話給ION +1之前...... –

1

不喜歡這樣,

[Codes to show progressDialog] 

Ion.with(MainActivity.this) 
      .load("--URL TO POST JSON DATA--") 
      .setJsonObjectBody(params[0]) 
      .asJsonObject() 
      .withResponse() 
      .setCallback(new FutureCallback<Response<JsonObject>>() 
{ 
       @Override 
       public void onCompleted(Exception e, Response<JsonObject> result) { 
if(progressDialog.isShowing()){ 

     progressDialog.dismiss(); 

     //TODO Something 

    } 
        if (result != null) { 
         if (result.getHeaders().code() == 200) { 

          Toast.makeText(MainActivity.this, "Login Success", Toast.LENGTH_SHORT).show(); 

         } else if (result.getHeaders().code() == 401) { 
          Toast.makeText(MainActivity.this, "Invalid Username or password", Toast.LENGTH_LONG).show(); 

         } else { 
          Toast.makeText(MainActivity.this, "Something wrong check connection !!!", Toast.LENGTH_SHORT).show(); 
         } 
        } 
       } 
      }); 
+0

感謝您的幫助建議..但它已經通過第一個回答+1來解決你的建議。 –

1

onCompleted()方法,則需要通過在setCallback()方法是一個異步調用,所以當響應從服務器返回這個回調將被調用的回調方法,它需要一定的時間即爲什麼在futureTask之前調用onPostExecute方法。

Ion lib已經使用異步調用,所以你不需要使用AsyncTask。你只需要做以下幾點:

Ion.with(MainActivity.this) 
      .load("--URL TO POST JSON DATA--") 
      .setJsonObjectBody(params[0]) 
      .asJsonObject() 
      .withResponse() 
      .setCallback(new FutureCallback<Response<JsonObject>>() { 
       @Override 
       public void onCompleted(Exception e, Response<JsonObject> result) { 

        if (result != null) { 
         if (result.getHeaders().code() == 200) { 

          Toast.makeText(MainActivity.this, "Login Success", Toast.LENGTH_SHORT).show(); 

         } else if (result.getHeaders().code() == 401) { 
          Toast.makeText(MainActivity.this, "Invalid Username or password", Toast.LENGTH_LONG).show(); 

         } else { 
          Toast.makeText(MainActivity.this, "Something wrong check connection !!!", Toast.LENGTH_SHORT).show(); 
         } 
        } 
       } 
      }); 
+0

感謝您的回答..但它已經由First ...解決了... –

相關問題