【发布时间】:2013-09-10 19:37:07
【问题描述】:
从我的主要activity,我需要调用一个内部类,并且在类内的一个方法中,我需要显示AlertDialog。关闭后,按下 OK 按钮后,转到 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();
}
【问题讨论】:
-
如果这是你的完整代码,你真的需要 AsyncTask 吗?
-
这不是完整的代码,这是一个相当大的代码,所以我只添加了我在崩溃报告中看到问题的部分
-
好的好的。通常你可以只发布函数名称并评论你正在那里做很多事情(就像你现在所做的那样)。它更容易理解。 :)。
-
您是否正在某个地方从该活动导航到其他活动?
-
你写的是 cmets
//send to some other activity。我想如果你评论你要去一个新活动的部分,这个错误就会消失。该错误似乎发生了,因为您之前的对话框被完全关闭,您的新活动开始了。在onPostExecute()中,您有警报对话框,并且您正在提供login活动的上下文。但是您正在导航到其他活动,因此上下文变得错误。因此,您收到此错误!见stackoverflow.com/questions/15104677/…类似问题。
标签: android android-alertdialog