Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.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
Java 如何使用AsyncTask将值设置回被调用的活动_Java_Android - Fatal编程技术网

Java 如何使用AsyncTask将值设置回被调用的活动

Java 如何使用AsyncTask将值设置回被调用的活动,java,android,Java,Android,我创建了一个异步类,如下所示 class RetrieveClimateInformation extends AsyncTask<String, Void, ClimateInfo> { protected ClimateInfo doInBackground(String... cityNames) { //Creating ClimateInfo object and returning it. } protected

我创建了一个异步类,如下所示

 class RetrieveClimateInformation extends AsyncTask<String, Void, ClimateInfo> {
      protected ClimateInfo doInBackground(String... cityNames) {
          //Creating ClimateInfo object and returning it.
      }

      protected void onPostExecute(ClimateInfo climateInfo) {

      }
 }
类检索气候信息扩展异步任务{
受保护的气候信息背景(字符串…城市名称){
//创建ClimateInfo对象并返回它。
}
PostExecute上的受保护无效(ClimateInfo ClimateInfo){
}
}
我已从MainActivity派生出此任务


doInBackground
方法中,我正在创建
ClimateInfo
对象并返回它。现在,在
onPostExecute()
中,我必须将此对象设置为MainActivity中的
climateInfo
字段。我怎样才能做到这一点。我在异步任务中没有MainActivity对象。

通过向类中添加构造函数,将对该活动的引用传递给异步任务:

RetrieveClimateInformation(MainActivity activity) { this.activity = activity }

然后在
postExecute
中调用该方法,如您所述,或者将类嵌套在activity类中,这样默认情况下任务将访问您的activity。

拥有该
ClimateInfo
很可能是不可序列化的,也不可打包的,您将无法使用
意图来执行此操作,因此您将无法使用广播。我认为最简单的方法是使用
处理程序
发送
消息
对象,您可以在其中包含任何您想要的对象。在
handleMessage
方法中,您只需将
Message.obj
对象强制转换为
ClimateInfo
,就得到了它

只需在
活动
中声明一个
处理程序
,初始化后,在
异步任务
中声明一个方法,如
设置处理程序(处理程序活动
),并在初始化
异步任务
后立即从
活动
调用它。通过这种方式,您可以将该引用传递给
异步任务
扩展,并且每当您需要向
活动
发送
消息时,只需在
异步任务
类中执行以下操作:

final Message my_climate = new Message();
my_climate.obj = your_climate_object;

ActivityHandler.send(my_climate);

将异步类放入活动中

公共类MainActivity扩展了活动{ . . .

公共类myTask扩展了AsyncTask{

}

}

在post-execute方法中,可以从任务内部设置变量