将不同类型的几个参数传递给doInBackground(Params ... params)方法的最正确方法是什么?

时间:2012-12-20 16:46:44

标签: java android android-asynctask

我正在为网站设计Android客户端。因此,我必须实现许多不同的网络操作。用于示例用户授权或在服务器上搜索。为此,我必须使用一些参数和URL向REST Web服务器发送JSON请求。所以我不仅要传递String参数,还要传递一些数据结构(例如LinkedHashMap)。问题我不知道最正确的方法。到目前为止我做了下一步:

  1. protected Boolean doInBackground(Object... param)。然后将param [0],param [1]转换为不同的类型。我认为这是一个糟糕的方式。
  2. 为此目的使用javatuples库:
  3. protected Void doInBackground(Pair<String, LinkedHashMap<String, Object>>... params)

    这似乎太复杂和冗余的代码。最重要的是我必须添加

    @SuppressWarnings("unchecked")
    

    或者我收到了类型安全警告。

    也许有些专家可以帮助我解决这个问题并提出最正确有效的建议。

3 个答案:

答案 0 :(得分:2)

您可以拥有自己的Asynctask构造函数,并将它们存储为可在doinBackground中使用的字段

    private class Task extends AsyncTask<Void, Void, Void> {

    Task(int a, long b){
       //store a, b
    }
    @Override
    protected Void doInBackground(Void... arg) {    
    }   
  }

然后

new Task(1,2).execute();

答案 1 :(得分:0)

“如果我是你”我不会将AsyncTask用于REST Application,而是可以提出其他设计模式来接管AsyncTask工作。 其中一个原因是丢失bandwidth可能会发生怎么样?如果您正在Http Transaction中间发布或获取数据,我会来电话,您的活动将在后台,操作系统可能会杀死您的可爱活动并关闭AsyncTask

您可以使用Service组件而不是AsyncTask,因为Android对它的评价高于后台的活动。

通过virgil查看来自Google IO的this旧视频

答案 2 :(得分:-1)

我通常会创建一个简单的类来封装我将要使用的所有数据。