2016-11-02 47 views
1

我正在嘗試完成付款,需要更多的時間才能完成,我不希望用戶留在視圖上,直到他們看到成功消息所以一旦他們點擊後臺任務中的付款按鈕在預執行,我顯示一個彈出窗口說「處理您的付款」。一旦用戶點擊確定,他們將被導航到不同的視圖。一旦後臺任務完成,我想在當前視圖中再次顯示一個彈出窗口,顯示「您的付款已成功」。如何在後臺任務完成後在當前活動中顯示警報對話框

這裏是代碼片段,

private class payment extends AsyncTask<Void, Void, Void> 
{ 
     payment() { 
     } 
     @Override 
     protected void onPreExecute() { 
      AlertDialog.Builder successDialog=new AlertDialog.Builder(PayActivity.this); 
      successDialog.setMessage("Processing your payment"); 
      successDialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.cancel(); 
        Intent lResultIntent = new Intent(); 
        setResult(RESULT_OK, lResultIntent); 
        finish(); 
       } 

      }); 

      successDialog.show(); 
     } 

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

      // ..... 
     } 

     @Override 
     protected void onPostExecute(Void result) { 

      Log.i("MSG","inside post"); 
      AlertDialog.Builder success = new AlertDialog.Builder(EditCardActivity.this); 
        success.setMessage("Your payment was successful"); 
        success.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.cancel(); 
         } 

        }); 
        success.show(); 
     } 
    } 

注意

當我試圖運行此代碼我得到的「E/UncaughtException:android.view.WindowManager $ BadTokenException:無法添加窗口 - 令牌[email protected]​​eb5無效;您的活動正在運行?「

所以我用Google搜索,發現

if(!isFinishing()) {success.show();} 

,但它並沒有幫助,當我登錄isFinishing()它打印爲true.This問題可能是重複我看到很多Q/A相似,此異常。我嘗試了大部分。不知道我缺少什麼。我來到這裏。任何建議或不同的方法都會有所幫助。謝謝!

回答

0

問題在onPreExecute方法中,因爲調用finish()方法,但AsyncTask仍在運行。

OK按鈕點擊完成當前活動之前,呼籲AsyncTask.cancel

.... 
setResult(RESULT_OK, lResultIntent); 
payment.this.cancel(true); 
finish(); 

isCancelled()另外補充檢查顯示警報從onPostExecute

if(!this.isCancelled()){ 
    // show Alert Here 
} 
+0

越來越java.lang.InterruptedException – irigs

+0

起初我試圖讓前Toast代替Alert對話框(onPostExecute),它在當前視圖中顯示得很好。但總是警告對話框失敗,此異常「E/UncaughtException:android.view.WindowManager $ BadTokenException:無法添加窗口 - 令牌[email protected]​​eb5無效;您的活動正在運行?」 – irigs

相關問題