Retrofit简单使用三

接口
http://fy.iciba.com/ajax.php?a=fy&f=auto&t=auto&w=hello%20world

Retrofit在使用的过程中是支持泛型的,使用泛型可以简化代码,避免不必要的数据解析
在前面的两个例子中,使用的都是ResponseBody,关于泛型的使用其实就是类似java的Bean,
这是接口返回json,所有的json基本都是这个结构,可能名称不一样。比如status 在可能是code,content是data,

{
    "status": 1,
    "content": {
        "from": "en-EU",
        "to": "zh-CN",
        "out": "示例",
        "vendor": "ciba",
        "err_no": 0
    }
}

在使用泛型的时候需要使用一些别的支持
使用gson解析数据,提供bean,gson自动解析数据

    //依赖地址
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'

使用上面的json写个javabean,作为retrofit的泛型

  public class Bean{
    private int status;

    private content content;
    private static class content {
        private String from;
        private String to;
        private String vendor;
        private String out;
        private int errNo;
    }

    //定义 输出返回数据 的方法
    public void show() {
           Log.i("bean",status);
       Log.i("bean",content.from);
        Log.i("bean",content.to);
        Log.i("bean",content.vendor);
        Log.i("bean",content.out);
        Log.i("bean",content.errNo+"");
    }
}

接口类中

这里放了两个接口,注意Call的泛型
public interface Api {
    @GET("GetMoreWeather")
    Call getWeather(@QueryMap Map map);

    @GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world")
    Call getCall();
}

activity的diam

   //步骤4:创建Retrofit对象
        Retrofit retrofit = new Retrofit.Builder()
                // 设置 网络请求 Url
                .baseUrl("http://fy.iciba.com/")
                //设置使用Gson解析(记得加入gson依赖,如果不加依赖而是用泛型,会报错,当然也有别的解析方法,不过gson最常使用)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        Api api = retrofit.create(Api.class);
        //对 发送请求 进行封装
        Call call = api.getCall();

        //步骤6:发送网络请求(异步)
        call.enqueue(new Callback() {
            //请求成功时回调
            @Override
            public void onResponse(Call call, Response response) {
                // 步骤7:处理返回的数据结果
                response.body().show();
            }

            //请求失败时回调
            @Override
            public void onFailure(Call call, Throwable throwable) {
                System.out.println("连接失败");
            }
        });

ps :个人建议这个泛型的使用在简单的json上使用,有时候复杂的json还是自己解析的,bean嵌套太深,不方便维护。而且后台返回的数据不一定都有用,使用gson全解析太浪费时间。

你可能感兴趣的:(Retrofit简单使用三)