[英]Why instead of two different AsyncTasks one executes two times?
所以我有代码,我发送请求到服务器并获得响应。 响应取决于我发送给服务器的参数集。但由于某种原因我得到了相同的结果。这是一个代码:我为两个不同的参数集调用sendDashboardRequest
:
LinkedHashMap<String, Object> serverParameters = new LinkedHashMap<String, Object>();
serverParameters.put("user_id", result.get("user_id"));
serverParameters.put("limit", Integer.valueOf(1000).toString());
serverParameters.put("type", Integer.valueOf(1).toString());
sendDashboardRequest(serverParameters);
serverParameters.put("type", Integer.valueOf(2).toString());
sendDashboardRequest(serverParameters);//Executes only this AsyncTask twice!
这里是sendDashboardRequest
方法的代码,它启动新的AsyncTasks:
public void sendDashboardRequest(LinkedHashMap<String, Object> params) {
new AsyncTask<LinkedHashMap<String, Object>, Void, LinkedHashMap<String, Object>>()
{
NetworkOp lowLevelOps = new NetworkOp();
@Override
protected LinkedHashMap<String, Object> doInBackground (LinkedHashMap<String, Object>... params)
{
return lowLevelOps.executeCommand(DASHBOARD_COMMAND, params[0]);
}
protected void onPostExecute(LinkedHashMap<String, Object> result)
{
//And here I gave the same result!But parameters which I send to the server are different!
}
}.execute(params);
}
最有趣的是当我使用相同的主体创建两个不同的方法并且为不同的参数集调用每个方法时,一切运行良好并且两个不同的AsyncTasks开始。
您在两个请求中发送相同的LinkedHashMap
。 由于请求在后台线程中提供服务,因此时间将无法预测,并且您无法保证在发出第二个请求之前第一个请求的后台线程将执行。 在这种情况下,偶然地,第二个请求中的修改值在执行第一个请求时已经在映射中。
您应该为每个请求使用不同的映射,或者更改sendDashboardRequest
以便它复制所需的数据,而不是依赖传入的映射保持不变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.