我想将每个用户响应添加到我的list listItem,插入响应的特定键和值对。但是,在这段代码中,getCat()的第一个循环执行了4次...然后所有响应都被添加到最后一个4的键中。
public void getCat(){
String url = "http://******/*****/*****.json";
HashMap<String, List<CatType> hmap=new HashMap<String, ArrayList<CatType>>();
private List<ListItem> listItems;
for(int i=1;i<5;i++)
{
JsonObjectRequest jsonReq = new JsonObjectRequest(Method.GET,
url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, "Response: " + response.toString());
parseJsonFeed(response);
listItems = new ArrayList<ListItem>();
listItem.addAll(O_listItems);
hmap.put("["+i+"]",listItem);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG, "Error: " + error.getMessage());
}
});
// Adding request to volley request queue
AppController.getInstance().addToRequestQueue(jsonReq);
}
}
private void parseJsonFeed(JSONObject response) {
try {
JSONArray feedArray = response.getJSONArray("food");
for (int i = 0; i < feedArray.length(); i++) {
JSONObject feedObj = (JSONObject) feedArray.get(i);
OrderListItem item=new OrderListItem();
item.setId(feedObj.getInt("id"));
item.setImage(feedObj.getString("image"));
item.setItem_name(feedObj.getString("name"));
O_listItems.add(item);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
这种情况正在发生,因为每次发出请求都会创建一个新线程,所以在第一次点击返回响应之前,会进行新的点击并继续。对于这种情况,最好使用AsyncTask或进行同步命中。有关同步点击的信息,请参阅this答案。