Java 尝试显示Toast时出现上下文问题

Java 尝试显示Toast时出现上下文问题,java,android,toast,android-context,Java,Android,Toast,Android Context,我尝试在异步任务中显示一个祝酒词。 这第一段代码放在一个我们可以称之为MyActivity的活动中,工作正常: Toast.makeText(this, "Toast!", Toast.LENGTH_SHORT).show(); 然后我创建一个新的MyObject实例,并调用method()。此代码也位于MyActivity中 MyObject obj = new MyObject(this); obj.method(); 这是MyObject的定义。ProgressDialog工作正常,但

我尝试在异步任务中显示一个祝酒词。 这第一段代码放在一个我们可以称之为
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
        }
   }
}
公共类MyObject{
上下文cxt;
公共MyObject(上下文cxt){
this.cxt=cxt;
}
公开作废法(){
新建MyAsyncTask().execute();
}
私有类MyAsyncTask扩展了AsyncTask{
受保护的void onPreExecute(){
Toast.makeText(cxt,“Toast!”,Toast.LENGTH_SHORT.show();//工作正常
}
受保护的布尔doInBackground(对象…参数){
Looper.prepare();
Toast.makeText(cxt,“Toast!”,Toast.LENGTH_SHORT).show();//不起作用
}
}
}

我相信在我的第一个例子和下面的例子中,我做了完全相同的事情,但显然,我遗漏了一些东西。我还尝试了
getApplicationContext()
cxt.getApplicationContext()
而不是
cxt
,但结果相同。

将其包装到
runOnUIThread
方法中:

runOnUiThread(new Runnable() {
    public void run() {
        Toast.makeText(cxt, "Toast!", Toast.LENGTH_SHORT).show();
    }
});
这是因为
doInBackground
方法没有在UI线程上执行,所以必须强制执行。

必须使用

MyObject.this 

在AsyncTask内部

您不应该使用
new
创建活动的新实例对不起,我通常不会这样做。我只是将我的常规代码重新编写成一个更好的示例,没有考虑它。但是谢谢你的观点!:)