android - OkHttp库使用如何完整的获取json数据
问题描述
在使用Okhttp中,获取json数据时,发现获取的数据不完全。服务器文件
使用okhttp请求test2.json(59KB)
···
OkHttpClient client = new OkHttpClient(); Request request=new Request.Builder().get().url('http://192.168.31.207/test2.json').build(); client.newCall(request).enqueue(new getCallBack());
···
getCallBack()为implements Callback(okhttp包下的)的类
重写成功的回调方法···
public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()){//String line ;//BufferedReader br = new BufferedReader(new InputStreamReader(response.body().byteStream()));//while ((line=br.readLine())!=null){// L.e(line);//}Reader r = response.body().charStream();char[] B = new char[4096];int length;while ((length=r.read(B))>0){ L.e(String.valueOf(B));}r.read(B); }}
···
无论是用byteStream还是用reader 都不能获取完整数据把char数组换成更大100000+也无济于事
打印的数据残缺。
但是将请求换成test.html(254KB)时又能全部输出
请问如何能成功的获取json数据?
问题解答
回答1:@Overridepublic void onResponse(Response response) { if (response.isSuccessful()) {try { final String result = response.body().string(); if (!TextUtils.isEmpty(result)) {JSONObject obj = new JSONObject(result);// 解析資料 }} catch (Exception e) { Log.e(TAG, 'Exception = ' + e);} }}回答2:
通过测试发现,控制行打印的数据有长度限制,并不会将所有的输出进行打印。但是数据是完整的。
回答3:因为android studio的logcat中一次打印的数据有4M(4*1024k)的显示,所以,如果json中的数据太多,在android studio的logcat中是显示不完全的,如果想款看全部日志,需要把日志导出来查看。这里推荐一种使用notepad++查看的方式:https://zhuanlan.zhihu.com/p/...
相关文章:
1. javascript - npm下载的模块不完整是什么问题?2. java - Spring事务回滚问题3. css - 手机qq打开网页无法使用文件上传功能?4. javascript - 单个页面执行多个jsonp的ajax请求,如何判断一个ajax请求执行完毕执行再另一个?5. node.js - 我想让最后进入数据库的数据,在前台最先展示,如何做到?6. apache - 想把之前写的单机版 windows 软件改成网络版,让每个用户可以注册并登录。类似 qq 的登陆,怎么架设服务器呢?7. 刚放到服务器的项目出现这中错误,有高手指点吗8. javascript - JS设置Video视频对象的currentTime时出现了问题,IE,Edge,火狐,都可以设置,反而chrom却...9. python 操作mysql如何经量防止自己的程序在之后被恶意注入(说白了就是问一下python防注入的一些要点)10. mysql - 面试题:如何把login_log表转换成last_login表?
