首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AsyncTask传递自定义对象

AsyncTask传递自定义对象
EN

Stack Overflow用户
提问于 2013-08-12 15:58:07
回答 3查看 4.4K关注 0票数 0

我有一辆定制的可包装的物件车

我看过AsyncTask,但在这个主题上还不太清楚:

我想将一个字符串(即车辆的车辆ID )传递到一个AsyncTask中,然后在doInBackground()中我有一个方法

代码语言:javascript
复制
mRemoteInterface.getTrackHistory();

这给了我一个ArrayList。然后,在onPostExecute()中启动一个车辆ID和ArrayList都是额外的活动。

这是我不能做的事情的概要。问题是,我不理解将对象传递到异步任务,然后从doInBackground()传递到onPostExecute(),从onPostExecute()传递回原始的执行调用。

GetTrackHistory.execute(,这里该怎么走?);

代码语言:javascript
复制
private class getTrackHistory extends
AsyncTask<String, Integer, Boolean **WHAT SHOULD GO HERE?**> {

    @Override
    protected Boolean doInBackground(
            String... params) {
        try {
            String vehicleID = params[0];
            listVehicleHistory = (ArrayList<Vehicle>) mRemoteInterface.getVehicleHistory(vehicleID);
        } catch (Exception e) {

            e.printStackTrace();
        }


    }




    @Override
    protected void onProgressUpdate(Integer... progress) {

    }

    @Override
    protected void onPostExecute(Boolean worked) {

        super.onPostExecute(worked);

        Intent intent = new Intent(MainActivity.this,VehicleInfo.class);

        intent.putExtra("Vehicle ID", toReturn);
        intent.putParcelableArrayListExtra("VehicleHistory", listVehicleHistory);

        startActivity(intent);
    }

}

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-12 16:01:24

可以将字符串传递给异步任务的构造函数或doInbackground。

代码语言:javascript
复制
   new getTrackHistory(mystringvalue).execute();

然后在构造函数中

代码语言:javascript
复制
  private class getTrackHistory extends AsyncTask<String, Integer, Boolean> {  

  String value; 
  public getTrackHistory(String mystring) {
      value = mystring;
  }

编辑:

您还可以将值传递给doInbackground()

代码语言:javascript
复制
   new TheTask().execute("mystring");
   class TheTask extends AsyncTask <String,Void,Void> { 
     @Override
     protected void onPreExecute() {
       super.onPreExecute();
     }
     @Override
     protected void onPostExecute(Void result) {
      super.onPostExecute(result);
     }
     @Override
     protected Void doInBackground(String... params) {
      String value = params[0];
     return null;
     }
   }

对评论中的问题

代码语言:javascript
复制
  new getTrackHistory(mystringvalue,ActivityName.this).execute();

在建筑中

代码语言:javascript
复制
  String value; 
  TheInterface listener;
  public getTrackHistory(String mystring,Context context) {
      value= mystring;
      listener = (TheInterface) context; 
  }

接口

代码语言:javascript
复制
public interface TheInterface {

public void theMethod(ArrayList<String> result); // your result type

}

然后

在doInbackground中返回结果。我假设它的ArrayList类型为String。将数组列表更改为适合您的需求。

在你的onPostExecute里

代码语言:javascript
复制
if (listener != null) {
  listener.theMethod(result); // result is the ArrayList<String>
  // result returned in doInbackground 
  // result of doInbackground computation is a parameter to onPostExecute 
}

在活动类中实现接口。

代码语言:javascript
复制
  public class ActivityName implements getTrackHistory.TheInterface

然后

代码语言:javascript
复制
 @Override
 public void theMethod(ArrayList<String> result) { // change the type of result according yo your requirement
 // use the arraylist here
 }

类似的post使用接口

Android解析get任务上的JSON

票数 5
EN

Stack Overflow用户

发布于 2013-08-12 16:02:26

常见的方法是将参数/对象传递给AsyncTask的构造函数,存储为成员,然后从doInBackground()引用。例如:

代码语言:javascript
复制
private class getTrackHistory extends AsyncTask<String, Integer, Boolean> {

    Vehicle mVehicle;

    public getTrackHistory( Vehicle v) {
       mVehicle = v;
    }

    @Override
    protected Boolean doInBackground() {

          // use mVehicle member here

    }
}
票数 2
EN

Stack Overflow用户

发布于 2013-08-12 16:01:56

Asynctask与任何其他类一样,只是一个类,使用构造函数,或者通过setter、公共成员等填充实例化对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18191479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档