2016-11-02 5 views
1

Ich versuche eine Zahlung durchzuführen, die mehr Sekunden in Anspruch nimmt. Ich möchte nicht, dass der Benutzer auf der Ansicht bleibt, bis er die Erfolgsmeldung sieht Sobald sie die Zahlungsschaltfläche in der Hintergrundtask On Pre execute drücken, erscheint ein Popup mit der Meldung "Processing your payment". Sobald der Benutzer auf OK klickt, wird zu der anderen Ansicht navigiert. Sobald die Hintergrundaufgabe abgeschlossen ist, möchte ich in der aktuellen Ansicht ein weiteres Popup mit der Meldung "Ihre Zahlung war erfolgreich" anzeigen.So zeigen Sie den Alert-Dialog in der aktuellen Aktivität an, nachdem die Hintergrundaufgabe abgeschlossen ist

Hier ist der Code-Schnipsel,

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(); 
     } 
    } 

HINWEIS

Wenn ich diesen Code auszuführen habe ich versucht, „E/UncaughtException war immer: android.view.WindowManager $ BadTokenException: Kann nicht hinzufügen Fenster - Token [email protected] ist nicht gültig; läuft Ihre Aktivität? "

So gegoogelt ich und fand

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

aber es hat nicht geholfen, wenn ich isFinishing angemeldet() es gedruckt als true.This Frage Duplikat sein kann, ich habe viele Q/A ähnlich wie diese Ausnahme gesehen . Ich habe das meiste ausprobiert. Nicht sicher, was ich vermisse. Ich bin hier geschlagen. Jeder Vorschlag oder andere Vorgehensweise wäre hilfreich. Vielen Dank!

Antwort

0

Problem ist in onPreExecute Methode, weil Aufruf finish() Methode, aber AsyncTask läuft noch.

Bevor aktuelle Aktivität auf OK klicken Finishing, rufen AsyncTask.cancel:

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

auch Check-in isCancelled() hinzufügen, bevor Alarm aus onPostExecute

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

bekommen java.lang.InterruptedException zeigt – irigs

+0

Anfangs habe ich versucht zu geben Der Toast anstelle des Dialogfelds "Warnung" (onPostExecute) wird in der aktuellen Ansicht angezeigt. Aber immer das Dialogfeld Warnung schlägt mit dieser Ausnahme fehl "E/UncaughtException: android.view.WindowManager $ BadTokenException: Fenster kann nicht hinzugefügt werden - Token [email protected] ist nicht gültig; wird Ihre Aktivität ausgeführt?" – irigs

Verwandte Themen