Из моего основного 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();
}
