在使用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数据?
因为android studio的logcat中一次打印的数据有4M(4*1024k)的显示,所以,如果json中的数据太多,在android studio的logcat中是显示不完全的,如果想款看全部日志,需要把日志导出来查看。这里推荐一种使用notepad++查看的方式:https://zhuanlan.zhihu.com/p/...
通过测试发现,控制行打印的数据有长度限制,并不会将所有的输出进行打印。但是数据是完整的。
@Override public 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); } } }