如何获得大响应体 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);
}
}
告诉我问题是什么,以及如何解决。我需要得到一个响应数组 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);
}
}