我正在开发Android应用,我正在使用AsyncTask连接到服务器,发送和检索一些值等。
在我连接到服务器之前,我会检查手机是否已连接到互联网以及doInBackground()
中的一些验证检查。如果这些检查中的任何一个失败,我取消该任务并设置一个取消消息字符串,稍后将用于向用户提供正确的消息。
现在,当我想在onCancelled方法中显示AlertDialog时会出现问题。我试图展示一个Toast,只是为了确保我能够达到活动,它有效。
经过几个小时的网络搜索并试图自己解决问题,我没有找到解决方案。
注意:我将当前的应用程序上下文传递到我正在扩展的类的构造函数中。
@Override
protected void onCancelled(){
String cancellationMessage = "";
// Some stuff goes in here to set the proper value for cancellationMessage.
AlertDialog.Builder builder = new AlertDialog.Builder(currentActivityContext);
builder.setTitle("Oops, something went wrong!")
.setMessage(cancellationMessage)
.setNeutralButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}).create().show();
}
看起来调用builder.show();
会抛出异常。
为什么在UI线程上运行onCancelled时会出现此问题?任何的想法?
顺便说一下,当我尝试显示警告对话框时,我在logcat选项卡中收到此异常:
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
答案 0 :(得分:0)
好的,伙计们,我找到了解决办法
我将<div class="product_item0 ">...</div>
<div class="product_item1 ">...</div>
<div class="product_item2 ">...</div>
<div class="product_item0 ">...</div>
<div class="product_item1 ">...</div>
<div class="product_item2 ">...</div>
<div class="product_item0 ">...</div>
<div class="product_item1 last">...</div>
<div class="product_item2 emptyItem">...</div>
作为活动上下文传递给了类的构造函数,而不是getApplicationContext()
。它现在就像一个魅力,嘿!
旧代码:
this
新代码:
public void signMeIn(View v){
String email = (String) ((EditText)findViewById(R.id.signInEmailText)).getText().toString();
String password = (String) ((EditText)findViewById(R.id.signInPasswordText)).getText().toString();
UserCredentialsAsync uca = new UserCredentialsAsync(getApplicationContext());
uca.signIn(email, password);
uca.execute();
}