我正在为网站设计Android客户端。因此,我必须实现许多不同的网络操作。用于示例用户授权或在服务器上搜索。为此,我必须使用一些参数和URL向REST Web服务器发送JSON请求。所以我不仅要传递String参数,还要传递一些数据结构(例如LinkedHashMap)。问题我不知道最正确的方法。到目前为止我做了下一步:
protected Boolean doInBackground(Object... param)
。然后将param [0],param [1]转换为不同的类型。我认为这是一个糟糕的方式。 protected Void doInBackground(Pair<String, LinkedHashMap<String, Object>>... params)
这似乎太复杂和冗余的代码。最重要的是我必须添加
@SuppressWarnings("unchecked")
或者我收到了类型安全警告。
也许有些专家可以帮助我解决这个问题并提出最正确有效的建议。
答案 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)
我通常会创建一个简单的类来封装我将要使用的所有数据。