Android 为我们的任务干杯
我想为asynctask干杯,但我在获取正确的参数方面遇到了困难。我从onProgressUpdate敬酒,所以我在UI线程上,我认为这是正确的。我认为上下文参数出错了,我应该传递什么作为值 编辑:显示下面的代码Android 为我们的任务干杯,android,android-asynctask,Android,Android Asynctask,我想为asynctask干杯,但我在获取正确的参数方面遇到了困难。我从onProgressUpdate敬酒,所以我在UI线程上,我认为这是正确的。我认为上下文参数出错了,我应该传递什么作为值 编辑:显示下面的代码 @Override protected void onProgressUpdate(String... strings){ Toast toast = Toast.makeText(MainActivity.this, strings[0], Toast.LENGTH_
@Override
protected void onProgressUpdate(String... strings){
Toast toast = Toast.makeText(MainActivity.this, strings[0], Toast.LENGTH_LONG);
toast.show();
}
MainActivity。这表示“范围内无法访问MainActivity类型的封闭实例”。我不确定应该将什么作为上下文传递
谢谢从
MainActivity
调用getApplicationContext()
获取上下文
对象,并将其作为参数传递给异步任务
。正如EboMike所指出的,MainActivity。只有当您的AsyncTask
是一个内部类时,此
才有效。如果它不是在使用点声明的内部类,则MainActivity。此
可能超出范围。解决此问题的唯一方法是子类化AsyncTask
,并将构造函数更改为接受上下文变量,以便您可以在自定义类中设置它并从方法中使用它。使用getApplicationContext
也可以,但我不确定它的行为。在onProgressUpdate()
中不能执行此操作。至少不是这样。如果Eclipse给您这个错误,那是因为MainActivity.this无法解决。为什么?因为您不在UI线程中,所以您所做的不是线程安全的,因为您不能从另一个线程访问UI
首先,如前所述,您应该编写一个构造函数,获取上下文并将其保存到一个全局变量,以便在类中的任何地方都可以访问它。
然后,要以线程安全的方式访问UI,请使用以下选项之一:
Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)
这些是线程安全的
关于任何上下文都应该做的事情,您得到的错误消息是什么?在创建Toast后是否在Toast上调用show()?没有错误,只有红色的波形。是否存在首选上下文?我试图传递MainActivity.this,但得到了一个“范围内无法访问MainActivity类型的封闭实例”。。。android的新功能,所以这可能是一个愚蠢的问题,所以这是一个编译错误?然后给我们看代码。那么它是一个单独的类?在这种情况下,需要将上下文传递到异步任务中
MainActivity。此
仅在AsyncTask是MainActivity的内部类时有效。它不需要是匿名内部类。一个命名的内部类将与MainActivity一起工作。这也是。此外,您不能从异步任务调用getApplicationContext()
。只有上下文
的子类,如活动
可以调用此方法。