使用Gson解析Retrofit返回结果

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 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

你可能感兴趣的:(Android,Java)