如何获得大响应体 Jsoup

How to get big response body Jsoup

告诉我问题是什么,以及如何解决。我需要得到一个响应数组 json 格式。在服务器上,响应在大约 30 分钟内形成,收集了一个包含 150K 元素的数组。然后就来dispatch了,挂了24小时多。但即使过了这么长时间,答案也没有出现。服务器上没有错误。如果您取 10K,那么答案就没有问题。我试图将答案保存到一个TXT文件中,它的大小是+-35MB,并且包含35K库存。

这是我执行请求的方式:

Connection.Response response = Jsoup.connect(URLs.sayt + "/" + URLs.api + "/hs/CLIENTS/LIST/")
                    .method(Connection.Method.GET)
                    .maxBodySize(0)
                    .timeout(0)
                    .userAgent(URLs.getUserAgentMobile())
                    .header("Authorization", "Basic " + base64login)
                    .header("Accept-Language", "*")
                    .header("mode", "tobase")
                    .execute();
            if(response != null){
                ArrayList<Client> clients = new Gson().fromJson(response.body(), new TypeToken<List<Client>>() {}.getType());
                for (Client client:clients){
                    sqLiteWork.AddToClient(client);
                }
            }

下面是 json 数组中元素的示例:

{"id": "9812d904-2d8a-11e8-80bb-a45d36c35311", "name": "Afaq", "code": "", "isGroup": false, "parent": "null", "address": "", "phone": "+994(12) 436 71 88", "phoneMore": "+994(50)2409696", "phoneHome": "", "debt": 0 }

我还没有找到我的问题的解决方案。我已经尝试了 okhttp 和 httpurlconnection。显然,android 客户端本身不支持正文中这么大的字符串响应。也许这将是通过文件的解决方案。但当您需要实际数据时,这不是解决方案。因此,我从服务器响应了 10K 个元素。完全加载 150K 个元素需要 2 个小时。

请注意,我说的是 up-to-date 数据,如果 2 小时很长,那么我的应用程序也支持在线模式。

Connection connection = Jsoup.connect(URLs.sayt + "/" + URLs.api + "/hs/CLIENTS/LIST/")
                    .method(Connection.Method.GET)
                    .ignoreContentType(true)
                    .maxBodySize(0)
                    .timeout(0)
                    .userAgent(URLs.getUserAgentMobile())
                    .header("Authorization", "Basic " + base64login)
                    .header("Accept-Language", "*")
                    .header("mode", "tobase");

            Connection.Response response = connection.execute();
            ArrayList<Client> clients = new Gson().fromJson(response.body(), new TypeToken<List<Client>>() {}.getType());
            Client last = null;
            for (Client client:clients){
                last = client;
                sqLiteWork.AddToClient(client);
            }

            while (clients.size() > 0){
                response = connection.header("last", last.id).execute();
                clients = new Gson().fromJson(response.body(), new TypeToken<List<Client>>() {}.getType());
                for (Client client:clients){
                    last = client;
                    sqLiteWork.AddToClient(client);
                }
            }