Z mojego głównego activity
, muszę wywołać klasę wewnętrzną, aw metodzie wewnątrz klasy muszę pokazać AlertDialog
. Po zamknięciu, po naciśnięciu przycisku OK, przejdź do Google Play w celu zakupu.
Przez większość czasu wszystko działa idealnie, ale w przypadku kilku użytkowników dochodzi do awarii builder.show()
i widzę "android.view.WindowManager$BadTokenException:
Nie można dodać okna z dziennika awarii. Zasugeruj.
Mój kod jest mniej więcej taki:
public class classname1 extends Activity{
public void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.<view>);
//call the <className1> class to execute
}
private class classNamename2 extends AsyncTask<String, Void, String>{
protected String doInBackground(String... params) {}
protected void onPostExecute(String result){
if(page.contains("error"))
{
AlertDialog.Builder builder = new AlertDialog.Builder(classname1.this);
builder.setCancelable(true);
builder.setMessage("");
builder.setInverseBackgroundForced(true);
builder.setNeutralButton("Ok",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton){
dialog.dismiss();
if(!<condition>)
{
try
{
String pl = "";
mHelper.<flow>(<class>.this, SKU, RC_REQUEST,
<listener>, pl);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
});
builder.show();
}
}
}
}
Widziałem również błąd w innym alercie, w którym nie przekazuję wiadomości do żadnego innego activity
. To jest takie proste:
AlertDialog.Builder builder = new AlertDialog.Builder(classname1.this);
builder.setCancelable(true);
//if successful
builder.setMessage(" ");
builder.setInverseBackgroundForced(true);
builder.setNeutralButton("Ok",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton){
// dialog.dismiss();
}
});
builder.show();
}
android
android-alertdialog
MSIslam
źródło
źródło
//send to some other activity
. Myślę, że jeśli skomentujesz część, w której idziesz do nowego działania, ten błąd zniknie. Wydaje się, że błąd występuje, ponieważ okno dialogowe sprzed zostało całkowicie zamknięte i rozpoczyna się nowa aktywność. WonPostExecute()
oknie masz okno dialogowe z ostrzeżeniem i podajesz kontekstlogin
działania. Ale przechodzisz do innej czynności, więc kontekst staje się zły. Dlatego otrzymujesz ten błąd! Zobacz stackoverflow.com/questions/15104677/ ... podobne pytanie.Odpowiedzi:
Problem:
Powód:
Rozwiązanie:
np .
Aktualizacja :
Żetony okien:
Scenariusz ze świata rzeczywistego:
źródło
Miałem okno dialogowe pokazujące funkcję:
Otrzymałem ten błąd i po prostu musiałem sprawdzić
isFinishing()
przed wywołaniem tego okna dialogowego pokazującego funkcję.źródło
if(!MyActivity.this.isFinishing())
? Jeśli to nie w porządku w MyActivityMożliwym powodem jest kontekst okna dialogowego ostrzeżenia. Możesz skończyć tę czynność, więc próbuje ona otworzyć się w tym kontekście, ale która jest już zamknięta. Spróbuj zmienić kontekst tego okna dialogowego na pierwszą czynność, ponieważ nie zostanie ona zakończona do końca.
na przykład
zamiast tego.
Spróbuj użyć
źródło
Następnie spróbuj utworzyć AlterDailog z poziomu kreatora, a następnie wywołaj show ().
źródło
Tworzę Dialog in
onCreate
i używam go zshow
ihide
. Dla mnie przyczyną nie było zwolnienieonBackPressed
, czyli zakończenieHome
działalności.Kończyłem Aktywność domową
onBackPressed
bez zamykania / zamykania okien dialogowych.Kiedy zamknąłem okna dialogowe, awaria zniknęła.
źródło
Próbuję to rozwiązało.
źródło
Spróbuj tego :
źródło
z pomysłem na zmienne globalne zapisałem wystąpienie MainActivity w onCreate (); Zmienna globalna Androida
i otwórz okno dialogowe w ten sposób. zadziałało.
aw wątku otwieram takie okno dialogowe.
:)
źródło