MalformedJsonException with Retrofit API?
2015-12-24 13:25
302 查看
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException
com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient
在使用Retrofit解析数据的时候有可能遇到MalformedJsonException json格式不严谨
在这里,我给自定义
3: 解析工厂
4:使用方式
com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient
在使用Retrofit解析数据的时候有可能遇到MalformedJsonException json格式不严谨
在这里,我给自定义
GsonConverterFactory
1:请求体,可修改 拦截
package com.retrofit.test.retrofit; import com.google.gson.Gson; import com.squareup.okhttp.MediaType; import com.squareup.okhttp.RequestBody; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.lang.reflect.Type; import java.nio.charset.Charset; import okio.Buffer; import retrofit.Converter; /** * ClassName GsonRequestBodyConverter * Description * Company * author youxuan E-mail:xuanyouwu@163.com * date createTime:2015/12/24 12:39 * version */ public class GsonRequestBodyConverter<T> implements Converter<T, RequestBody> { private static final MediaType MEDIA_TYPE = MediaType.parse("application/json; charset=UTF-8"); private static final Charset UTF_8 = Charset.forName("UTF-8"); private final Gson gson; private final Type type; GsonRequestBodyConverter(Gson gson, Type type) { this.gson = gson; this.type = type; } @Override public RequestBody convert(T value) throws IOException { Buffer buffer = new Buffer(); Writer writer = new OutputStreamWriter(buffer.outputStream(), UTF_8); try { gson.toJson(value, type, writer); writer.flush(); } catch (IOException e) { throw new AssertionError(e); // Writing to Buffer does no I/O. } return RequestBody.create(MEDIA_TYPE, buffer.readByteString()); } }
</pre><pre name="code" class="java">
</pre>2: 响应体解析<p></p><p></p><pre name="code" class="java">package com.retrofit.test.retrofit; import com.google.gson.Gson; import com.google.gson.stream.JsonReader; import com.squareup.okhttp.ResponseBody; import java.io.Closeable; import java.io.IOException; import java.io.Reader; import java.lang.reflect.Type; import retrofit.Converter; /** * ClassName GsonResponseBodyConverter * Description * Company * author youxuan E-mail:xuanyouwu@163.com * date createTime:2015/12/24 12:39 * version */ public class GsonResponseBodyConverter<T> implements Converter<ResponseBody, T> { private final Gson gson; private final Type type; GsonResponseBodyConverter(Gson gson, Type type) { this.gson = gson; this.type = type; } @Override public T convert(ResponseBody value) throws IOException { Reader reader = value.charStream(); try { JsonReader jsonReader = new JsonReader(reader); jsonReader.setLenient(true); return gson.fromJson(jsonReader, type); // return gson.fromJson(reader, type); } finally { closeQuietly(reader); } } static void closeQuietly(Closeable closeable) { if (closeable == null) return; try { closeable.close(); } catch (IOException ignored) { } } }
3: 解析工厂
package com.retrofit.test.retrofit; import com.google.gson.Gson; import com.squareup.okhttp.RequestBody; import com.squareup.okhttp.ResponseBody; import java.lang.annotation.Annotation; import java.lang.reflect.Type; import retrofit.Converter; /** * ClassName MyGsonConverter * Description * Company * author youxuan E-mail:xuanyouwu@163.com * date createTime:2015/12/24 12:39 * version */ public class MyGsonConverter extends Converter.Factory { public static MyGsonConverter create() { return create(new Gson()); } public static MyGsonConverter create(Gson gson) { return new MyGsonConverter(gson); } private final Gson gson; private MyGsonConverter(Gson gson) { if (gson == null) throw new NullPointerException("gson == null"); this.gson = gson; } @Override public Converter<ResponseBody, ?> fromResponseBody(Type type, Annotation[] annotations) { return new GsonResponseBodyConverter<>(gson, type); } @Override public Converter<?, RequestBody> toRequestBody(Type type, Annotation[] annotations) { return new GsonRequestBodyConverter<>(gson, type); } }
4:使用方式
Retrofit retrofit = new Retrofit.Builder() .baseUrl(Constants.BASE_URL) //.addConverterFactory(GsonConverterFactory.create()) .addConverterFactory(MyGsonConverter.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build();
相关文章推荐
- 利用js2image把代码压缩成圣诞树
- Javascript基于对象基础
- JS经常使用正則表達式【分享】
- javascript 闭包
- js常用方法和事件
- {"0":"192.168.1.100","1":"192.168.1.101"} 是Map
- js,将日期时分秒等格式化和转化
- JSTL动态加载单选框--【ssnc】
- html5载入JS引用
- javascript时间戳和日期字符串相互转换
- mvc使用JsonResult返回Json数据
- js-图标控件
- Jsoup 网页抓取数据之获取汽车时刻表 实例解析
- json 转换为 map、对象
- JavaScript 前端编程使用小技巧
- js对表单设置了readonly和disabled后的区别
- Ajax跨域、Json跨域、Socket跨域和Canvas跨域等同源策略限制的解决方法
- JavaScript的性能优化:加载和执行
- js获取当前url主机名和端口号
- 高性能Javascript:脚本的无阻塞加载策略