解析时报错com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 3 path $.
思路:1,分析是否json格式有错误(通过gsonformat验证)。
2,后台返回数据是否有多余空格(拦截器打印返回数据)。
3,retrofit.addConverterFactory(GsonConverterFactory.create(gson))检查解析器是否正确)(配置gson解析并creat )final static Gson gson = new GsonBuilder()
.setLenient()
.create();
这是要传入构造器的gson。
retrofit添加Cookie
public class AddCookiesInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
final Request.Builder builder = chain.request().newBuilder();
String cookie = SPUtil.getInstance().getString("cookie", "");
if(!StringUtil.isEmpty(cookie)){
builder.addHeader("Cookie", cookie);
}
return chain.proceed(builder.build());
}
}
public class ReceivedCookiesInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Response originalResponse = chain.proceed(chain.request());
//这里获取请求返回的cookie
if (!originalResponse.headers("Set-Cookie").isEmpty()) {
final StringBuffer cookieBuffer = new StringBuffer();
String[] split = originalResponse.headers("Set-Cookie").get(0).split(";");
cookieBuffer.append(split[0]).append(";");
SPUtil.getInstance().put("cookie",cookieBuffer.toString());
LogUtil.d(cookieBuffer.toString());
}
return originalResponse;
}
}
然后在构建OkHttpClient的时候将上面两个拦截器添加进去就行了
OkHttpClient.Builder mBuilder = new OkHttpClient().newBuilder();
//根据需求判断是否需要添加或存储Cookie
if(needCookie){
mBuilder.addInterceptor(new ReceivedCookiesInterceptor());
mBuilder.addInterceptor(new AddCookiesInterceptor());
}