排球批量请求和响应

时间:2015-06-03 14:05:53

标签: android android-volley

有没有办法在Android中发送和收听凌空批量请求和响应? 我想在网络恢复后同步所有离线数据。 目前我正在使用for循环将请求添加到队列。我会为每个请求单独获取响应。 批处理请求和响应侦听器有什么办法吗?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,然后我以一种愚蠢的方式解决了它。只有在批量处理中有少量请求时才有用。希望它有所帮助:)

public static void requestData(@NonNull final Context context, final String url, final String cityID, final int typeOfResult, final int batchId) {
    MySingletonWraper.getInstance(context).addToRequestQueue(new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            // add json object to list json of this batch
            Batch batch = listBatch().get(batchID);
            batch .getListRespones().add(respone);
            // listBatch is a ArrayList of Object Batch which have id, queue url, list results
            urlsQueue = batch .getUrlsQueue();
            if (urlsQueue.isEmpty()) { // I create a queue for control in a batch, check if it's empty - this is last request
                // parse JsonObject for today weather                    
                parseJsonToWeatherObject(typeOfResult);
                return;
            }
            // only request if sure the previous request is successed
            // if have too many reuqests in a batch, just break it if you can
            requestData(context, urlsQueue .poll(), cityID, typeOfResult, batchID);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            // write log error
            error.printStackTrace();
            // refresh this batch
            listBatch().refresh();
            // re-request
            fetch(context, cityID, batchID);

        }
    }));
}

答案 1 :(得分:0)

我认为批量监听器没有实际的实现。虽然可以发送多个请求,但响应不会同时到达。值得注意的是,在Volley中,网络池大小的上限为4(我相信这是由常量DEFAULT_NETWORK_THREAD_POOL_SIZE定义的)。您可以向队列添加许多请求,但一次只能处理4个请求。到目前为止,Volley没有完成队列的回调,这在技术上是一个足够接近的批量监听器实现。

所以你仍然需要单独处理每个响应。虽然考虑到网络过程很昂贵,但我会在服务器上预处理要发送到设备的任何数据,从而无需执行多个请求。