Android 多次截击对方的请求?

Android 多次截击对方的请求?,android,android-asynctask,request,android-volley,Android,Android Asynctask,Request,Android Volley,我正在制作一个android应用程序,需要通过HTTP请求获取JSON数据。要检索的数据可能相当大(100-500mb)。后端是用RESTER()编写的restapi 所以问题是:我一次只能得到10.000个JSON对象(大约10兆字节)。如果可能的话,我想请求10000个对象,如果有更多的数据需要检索,我将请求下一个10000个对象,以此类推 现在我正在使用截击和JSONArrayRequest private void requestMeasurement(int id, int limit

我正在制作一个android应用程序,需要通过HTTP请求获取JSON数据。要检索的数据可能相当大(100-500mb)。后端是用RESTER()编写的restapi

所以问题是:我一次只能得到10.000个JSON对象(大约10兆字节)。如果可能的话,我想请求10000个对象,如果有更多的数据需要检索,我将请求下一个10000个对象,以此类推

现在我正在使用截击和JSONArrayRequest

private void requestMeasurement(int id, int limit, int offset) {
    RequestQueue requestQueue = Volley.newRequestQueue(context);

    String url = "http://10.201.201.10:888/index.php/ser" + id + "?limit=" + limit + "&offset=" + offsett;
    JsonArrayRequest jsObjectRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    });
    requestQueue.add(jsObjectRequest);
}
private void requestMeasurement(int-id、int-limit、int-offset){
RequestQueue RequestQueue=Volley.newRequestQueue(上下文);
字符串url=”http://10.201.201.10:888/index.php/ser“+id+”?limit=“+limit+”&offset=“+offsett;
JsonArrayRequest jsObjectRequest=新的JsonArrayRequest(url,new Response.Listener()){
@凌驾
公共void onResponse(JSONArray响应){
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
});
add(jsObjectRequest);
}
希望有人能帮忙。对不起,英语不好:)

更新:尝试在onResponse()内再次调用请求:

private void requestMeasurement(最终整数id、最终整数限制、最终整数偏移){
requestQueue=Volley.newRequestQueue(上下文);
字符串url=”http://10.201.201.10:888/index.php/ser“+id+”?limit=“+limit;
JsonArrayRequest jsObjectRequest=新的JsonArrayRequest(url,new Response.Listener()){
@凌驾
公共void onResponse(JSONArray响应){
if(response.length()>=limit){
请求测量(id、限制、偏移量+限制);
}否则{
Log.i(“Completed=”,“true”);
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
});
add(jsObjectRequest);
}

这会导致内存不足导致崩溃,我不明白为什么…

您可以在onResponse回调中检查响应列表的大小,并调用请求方法,直到响应列表小于10。000@darwin我想我明白你的意思,并尝试过,如果它工作,但现在我用完了内存和崩溃。我已经更新了描述。可能是您将这些巨大的数据存储在一个数组列表中(保存在运行时内存中),这会导致OOM,因为androidI修复了单个应用程序的有限内存空间。将每个请求的对象数降低到<8000,现在可以正常工作:)很好,在不同的android设备上试用。因为设备的堆内存不同,所以最好在低配置设备上测试
private void requestMeasurement(final int id, final int limit, final int offset) {
    requestQueue = Volley.newRequestQueue(context);
    String url = "http://10.201.201.10:888/index.php/ser" + id + "?limit=" + limit;
    JsonArrayRequest jsObjectRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            if (response.length() >= limit) {

                requestMeasurement(id, limit, offset+limit);
            } else {
                Log.i("Completed = ", "true");
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    });
    requestQueue.add(jsObjectRequest);
}