Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为我们的任务干杯_Android_Android Asynctask - Fatal编程技术网

Android 为我们的任务干杯

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_

我想为asynctask干杯,但我在获取正确的参数方面遇到了困难。我从onProgressUpdate敬酒,所以我在UI线程上,我认为这是正确的。我认为上下文参数出错了,我应该传递什么作为值

编辑:显示下面的代码

    @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()
。只有
上下文
的子类,如
活动
可以调用此方法。