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方法中,可以从任务内部设置变量