À partir de mon activité principale, j'ai besoin de faire appel à un intérieur de classe(où je fais appel de service web) et dans une méthode de la classe,j'ai besoin de montrer AlertDialg et écarter lorsque le bouton OK est pressée et à transmettre à Google Play pour l'achat.
Les choses fonctionnent parfaitement pour la plupart du temps, mais pour quelques utilisateurs, c'est de s'écraser sur le générateur.show() et je peux voir "android.vue.WindowManager$BadTokenException: Impossible d'ajouter la fenêtre" à partir de crash. S'il vous plaît suggérer.
Mon code sont à peu près comme ceci:
public class login extends Activity{
public void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
new chkCubscription.execute("");
}
private class chkSubscription extends AsyncTask<String, Void, String>{
protected String doInBackground(String... params) {
//web service call
}
protected void onPostExecute(String result){
if(page.contains("error")) //when not subscribed
{
AlertDialog.Builder builder = new AlertDialog.Builder(login.this);
builder.setCancelable(true);
builder.setMessage(sucObject);
builder.setInverseBackgroundForced(true);
builder.setNeutralButton("Ok",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton){
dialog.dismiss();
if(!mSubscribedToHomeApp)
{
try
{
String payload = "";
mHelper.launchPurchaseFlow(login.this, SKU, RC_REQUEST,
mPurchaseFinishedListener, payload);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
});
builder.show();
}
}
}
private class MyAsyncTask extends AsyncTask<String, Void, String>
{
//Web Service call to check authentication
}
}
J'ai également vu l'erreur dans une autre alerte où je ne suis pas transmettre à toute autre activité. C'est simple comme ceci:
AlertDialog.Builder builder = new AlertDialog.Builder(login.this);
builder.setCancelable(true);
JSONObject jObject = null;
try {
jObject = new JSONObject(page);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (page.contains("Error Message")){
try {
sucObject = jObject.getString("Error Message");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else{
builder.setMessage(" ");
builder.setInverseBackgroundForced(true);
builder.setNeutralButton("Ok",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton){
// dialog.dismiss();
}
}
});
builder.show();
}