Из основного activity
мне нужно вызвать внутренний класс и метод внутри класса, который мне нужно показать AlertDialog
. После его закрытия и нажатия кнопки ОК переадресовать в Google Play для покупки.
В большинстве случаев все работает идеально, но у некоторых пользователей происходит сбой, builder.show()
и я вижу « "android.view.WindowManager$BadTokenException:
Невозможно добавить окно» из журнала сбоев. Пожалуйста, предложите.
Мой код примерно такой:
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();
}
}
}
}
Я также видел ошибку в другом предупреждении, где я не пересылаю никому activity
. Это просто так:
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
источник
источник
//send to some other activity
. Я думаю, что если вы прокомментируете часть, в которой собираетесь перейти к новому Activity, эта ошибка исчезнет. Кажется, что ошибка возникает из-за того, что ваш предыдущий диалог полностью закрывается, начинается ваше новое действие. ВonPostExecute()
, у вас есть диалоговое окно с предупреждением, и вы даете контекстlogin
Activity. Но вы переходите к другому действию, поэтому контекст становится неверным. Следовательно, вы получаете эту ошибку! См. Stackoverflow.com/questions/15104677/… аналогичный вопрос.Ответы:
Проблема:
Причина:
Решение:
напр .
Обновить :
Жетоны окон:
Реальный сценарий:
источник
У меня был диалог, показывающий функцию:
Я получал эту ошибку, и мне просто нужно было проверить,
isFinishing()
прежде чем вызывать это диалоговое окно, показывающее функцию.источник
if(!MyActivity.this.isFinishing())
? Если это неправильно в MyActivityВозможная причина - контекст диалогового окна предупреждения. Возможно, вы закончили это действие, поэтому оно пытается открыться в этом контексте, но оно уже закрыто. Попробуйте изменить контекст этого диалога на свое первое действие, потому что оно не будет завершено до конца.
например
а не это.
попробуй использовать
источник
во-вторых, попробуйте создать AlterDailog из построителя, затем вызовите show ().
источник
Я создаю диалог
onCreate
и использую его вместе сshow
иhide
. Для меня основной причиной было не увольнениеonBackPressed
, а завершениеHome
деятельности.Я заканчивал домашнее задание,
onBackPressed
не закрывая / не закрывая диалоговые окна.Когда я закрыл диалоги, сбой исчез.
источник
Я пытаюсь это решить.
источник
Попробуй это :
источник
с этой идеей глобальных переменных я сохранил экземпляр MainActivity в onCreate (); Глобальная переменная Android
и откройте диалог, подобный этому. это сработало.
и в ветке я открываю такой диалог.
:)
источник