Do meu principal activity
, preciso chamar uma classe interna e, em um método dentro da classe, preciso mostrar AlertDialog
. Depois de dispensá-lo, quando o botão OK for pressionado, encaminhe para o Google Play para compra.
As coisas funcionam perfeitamente na maioria das vezes, mas para poucos usuários está travando builder.show()
e posso ver "android.view.WindowManager$BadTokenException:
Não é possível adicionar janela "no log de travamento. Por favor, sugira.
Meu código é mais ou menos assim:
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();
}
}
}
}
Também vi o erro em outro alerta onde não estou encaminhando para nenhum outro activity
. É simples assim:
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
fonte
fonte
//send to some other activity
. Acho que se você comentar a parte em que está indo para uma nova Activity, esse erro vai embora. O erro parece ocorrer porque sua caixa de diálogo antes de ser completamente descartada, sua nova atividade será iniciada. NoonPostExecute()
, você tem a caixa de diálogo de alerta e está fornecendo o contexto dalogin
atividade. Mas você está navegando para outra atividade, então o contexto fica errado. Portanto, você está recebendo este erro! Consulte stackoverflow.com/questions/15104677/… pergunta semelhante.Respostas:
Problema:
Razão:
Solução:
por exemplo .
Atualização:
Tokens de janela:
Um cenário do mundo real:
fonte
Tive uma caixa de diálogo mostrando a função:
Eu estava recebendo este erro e só tive que verificar
isFinishing()
antes de chamar esta caixa de diálogo que mostra a função.fonte
if(!MyActivity.this.isFinishing())
? Se não estiver certo em MyActivityO possível motivo é o contexto da caixa de diálogo de alerta. Você pode ter terminado aquela atividade então ela está tentando abrir naquele contexto, mas que já está fechado. Tente mudar o contexto desse diálogo para a sua primeira atividade, porque ele não será concluído até o final.
por exemplo
em vez disso.
tente usar
fonte
em seguida, tente criar AlterDailog a partir do construtor e, em seguida, chame show ().
fonte
Estou criando Dialog em
onCreate
e usando-o comshow
ehide
. Para mim a causa raiz não foi demitironBackPressed
, que foi encerrar aHome
atividade.Eu estava terminando a Atividade doméstica
onBackPressed
sem fechar / dispensar meus diálogos.Quando descartei minhas caixas de diálogo, a falha desapareceu.
fonte
Eu tento resolver isso.
fonte
Experimente isto:
fonte
com essa ideia de variáveis globais, salvei a instância MainActivity em onCreate (); Variável global Android
e abrir diálogo como este. funcionou.
e em um tópico, eu abro um diálogo como este.
:)
fonte