如何停止循环执行,直到响应进入android

时间:2015-10-03 20:19:04

标签: android

我想将每个用户响应添加到我的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();
    }
}

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为每次发出请求都会创建一个新线程,所以在第一次点击返回响应之前,会进行新的点击并继续。对于这种情况,最好使用AsyncTask或进行同步命中。有关同步点击的信息,请参阅this答案。