我尝试在 AsyncTask 中显示 Toast。第一段代码放在我们可以调用的活动中MyActivity
,并且工作正常:
Toast.makeText(this, "Toast!", Toast.LENGTH_SHORT).show();
然后我创建一个新实例MyObject
并调用method()
. 这段代码也放在MyActivity
.
MyObject obj = new MyObject(this);
obj.method();
这是 的定义MyObject
。ProgressDialog 工作正常,但没有显示吐司。
public class MyObject {
Context cxt;
public MyObject(Context cxt) {
this.cxt = cxt;
}
public void method() {
new MyAsyncTask().execute();
}
private class MyAsyncTask extends AsyncTask<Object, Integer, Boolean> {
protected void onPreExecute() {
Toast.makeText(cxt, "Toast!", Toast.LENGTH_SHORT).show(); // works fine
}
protected Boolean doInBackground(Object... params) {
Looper.prepare();
Toast.makeText(cxt, "Toast!", Toast.LENGTH_SHORT).show(); // doesn't work
}
}
}
我相信在我的第一个示例和下面的示例中我正在做完全相同的事情,但显然我遗漏了一些东西。我也尝试过getApplicationContext()
andcxt.getApplicationContext()
而不是cxt
,但结果相同。