为什么而不是两个不同的AsyncTasks执行两次?

时间:2013-03-18 13:18:59

标签: java android android-asynctask

所以我有代码,我向服务器发送请求并获得响应。响应取决于我发送给服务器的参数集。但由于某种原因我得到了相同的结果。这是一个代码:我为两个不同的参数集调用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开始。

1 个答案:

答案 0 :(得分:4)

您在两个请求中发送相同的LinkedHashMap。由于请求在后台线程中提供服务,因此时间将无法预测,并且您无法保证在发出第二个请求之前第一个请求的后台线程将执行。在这种情况下,第二个请求中的修改值在第一个请求执行时已经在映射中。

您应该为每个请求使用不同的地图,或者更改sendDashboardRequest以便复制所需的数据,而不是依赖传入的地图保持不变。