从AsyncTask提高Toast

时间:2011-03-22 01:00:03

标签: android android-asynctask

我正在尝试从asynctask中提出一个祝酒词,但是我无法正确获取我的参数。我正在onProgressUpdate敬酒,所以我在UI线程上,我认为这是正确的。我想我的上下文参数出错了,我应该把什么作为值传递?

编辑:显示以下代码

    @Override
protected void onProgressUpdate(String... strings){
    Toast toast = Toast.makeText(MainActivity.this, strings[0], Toast.LENGTH_LONG);
    toast.show();
}

MainActivity.this说“在范围内无法访问MainActivity类型的封闭实例”。我不确定将什么作为上下文传递。

由于

3 个答案:

答案 0 :(得分:4)

Context调用getApplicationContext()获取MainActivity对象,并将其作为参数传递给AsyncTask。正如EboMike指出的那样,MainActivity.this只有在你的AsyncTask是内部阶级时才有效。

答案 1 :(得分:2)

如果它不是在使用点声明的内部类,则MainActivity.this可能超出范围。解决问题的唯一方法是子类AsyncTask并更改构造函数以接受上下文变量,以便您可以在自定义类中设置它并从方法中使用它。使用getApplicationContext可能也有效,但我不确定它会如何表现。

答案 2 :(得分:0)

您无法在onProgressUpdate()中执行此操作。至少不是这样的。如果Eclipse给你这个错误,那是因为MainActivity.this是无法解决的。为什么?因为您不在UI线程中,所以您所做的不是线程安全的,因为您不能从另一个线程访问UI。

首先,如前所述,您应该编写一个构造函数来获取上下文并将其保存到全局变量中,因此它可以在类中的任何位置访问。 然后,要以线程安全的方式访问UI,请使用以下方法之一:

Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)

这些是线程安全的。

此致