使用Gson解析Retrofit返回结果

来源:互联网 发布:贩卖淘宝店铺犯法吗? 编辑:程序博客网 时间:2024/05/16 17:47

Retrofit和RxJava系列博客:
使用Retrofit上传文件
使用Gson解析Retrofit返回结果
Retrofit和RxJava结合使用
使用Retrofit和RxJava进行轮询操作


由于Retrofit默认返回的结果是ResponseBody类型,而我们实际中常常返回的是json格式字符串,此时就需要对返回结果进行解析。Retrofit也提供了灵活的json解析方式。得益于Converter 的存在, Retrofit 在入参和返回类型上表现得非常灵活,只要我们修改一下ResponseBodyConverter就可以自由地修改返回数据的类型,使用适当的解析方法。如果需要使用gson解析字符串怎么办呢?自己手工写一个当然可以,但是Retrofit提供了更加方便的实现,我们只需要使用converter-gson这个库即可。

添加依赖

在build.gradle中加入依赖,此时不仅仅需要Retrofit的依赖,还需要加入gson和converter-gson两个依赖,这里的converter-gson就是我们需要的gson解析库。

compile 'com.squareup.retrofit2:retrofit:2.1.0'compile 'com.google.code.gson:gson:2.7'compile 'com.squareup.retrofit2:converter-gson:2.1.0'

定义gson类

熟悉gson使用的童鞋应该知道,gson使用的时候需要定义一个类,这个类里面的字段与json字符串里面的键一一对应。我们根据实际情况定义这个类。比如我这里需要接受3个字段,分别为messageflagaddDate

public class UploadJsonResult {    String message;    String flag;    String addDate;    public String getFlag() {        return flag;    }    public String getMessage() {        return message;    }    public String getAddDate() {        return addDate;    }}

添加converter-gson

为了解析ResponseBody中返回的json字符串,首先需要修改请求接口中的返回值类型,将通用的ResponseBody改成这里的json类UploadJsonResult

public interface RetrofitImageUploadService {        @Multipart        @POST("EntranceGuardes/app/appOpen_pushdDataToApp.action")        Call<UploadJsonResult> upload(@Part("userId") RequestBody description,                                            @Part MultipartBody.Part file);    }

然后只需要在创建Retrofit对象时加入addConverterFactory(GsonConverterFactory.create())即可,这样就可以将默认的ResponseBody类型返回值使用gson进行解析,最终得到的响应结果就是UploadJsonResult类型的对象。

Retrofit retrofit = new Retrofit.Builder()                .baseUrl("http://172.18.81.155:8080/")                .addConverterFactory(GsonConverterFactory.create())                .build();

经过上面的操作,从服务器返回的字符串已经解析成了我们需要的UploadJsonResult对象。现在只需要调用enqueue方法就可以进行异步请求了。

代码地址

https://github.com/flyingzhao/RxJavaPolling/blob/master/app/src/main/java/com/optimais/pollingtest/UpLoadImage.java

0 0