在做关于阿里云api接口关于天气预报实验时,发现对于七天的天气预报的实体参数的提取是正常的,但是对15天的天气的提取出现了报错:
将上述代码删去多余部分(2024...)复制至下方出现报错
放至在线JSON网站下看到完整代码发现了问题:
发现代码并不完整,问题是日志过于长而导致数据不全, Android系统的单条日志打印长度是有限和固定的。
一开始的解决方案是通过修改studio64.exe.vmoptions的内容来增加控制台缓冲区的大小:
第一种是通过点击"Help"->"Edit Custom VM Options"中添加:
-Xms512m
-Xmx2048m
-XX:MaxPermSize=1024m
第二种是在studio64.exe.vmoptions文件中添加:
idea.cycle.buffer.size=1024
但是两种方法都没解决我的问题
最终通过上网查询找到解决方法:
将retrofit工具类由原来的,分段打印
public class RetrofitUtils {
public static Retrofit getRetrofit(String url) {
//日志显示级别
HttpLoggingInterceptor.Level level= HttpLoggingInterceptor.Level.BODY;
//新建log拦截器
HttpLoggingInterceptor loggingInterceptor=new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
Log.d("RetrofitMessage","OkHttp====Message:"+message);
}
});
loggingInterceptor.setLevel(level);
//定制OkHttp
OkHttpClient.Builder httpClientBuilder = new OkHttpClient
.Builder();
//OkHttp进行添加拦截器loggingInterceptor
httpClientBuilder.addInterceptor(loggingInterceptor);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.client( httpClientBuilder.build())
.build();
return retrofit;
}
}
改为了:
public class RetrofitUtils {
public static Retrofit getRetrofit(String url) {
//日志显示级别
HttpLoggingInterceptor.Level level= HttpLoggingInterceptor.Level.BODY;
//新建log拦截器
HttpLoggingInterceptor loggingInterceptor=new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
//我们采取分段打印日志的方法:当长度超过4000时,我们就来分段截取打印
//剩余的字符串长度如果大于4000
if (message.length() > 4000) {
for (int i = 0; i < message.length(); i += 4000) {
//当前截取的长度<总长度则继续截取最大的长度来打印
if (i + 4000 < message.length()) {
Log.i("RetrofitMessage" + i, message.substring(i, i + 4000));
} else {
//当前截取的长度已经超过了总长度,则打印出剩下的全部信息
Log.i("RetrofitMessage" + i, message.substring(i, message.length()));
}
}
} else {
//直接打印
Log.i("RetrofitMessage", message);
}
}
});
loggingInterceptor.setLevel(level);
//定制OkHttp
OkHttpClient.Builder httpClientBuilder = new OkHttpClient
.Builder();
//OkHttp进行添加拦截器loggingInterceptor
httpClientBuilder.addInterceptor(loggingInterceptor);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.client( httpClientBuilder.build())
.build();
return retrofit;
}
}
记得要删去多余的内容!