Retrofit2的简单使用

关于Retrofit2我也是闻名已久了,一直想去用这个库,但就之前的水平来说,我是看不懂的…

image

在我阅读能力随着技术一步步提升之后,我发现我终于看得懂了,于是赶快使用一下凑个热闹。

首先还是老样子,我看的博客地址是
http://blog.csdn.net/carson_ho/article/details/73732076

写的非常详细,感谢这些大佬们!

关于Retrofit2的详细使用在上面的博客中已经有了,我再写在这篇博客里面难免有些画蛇添足的味道。所以我还是仅仅写一下它的最简单最基础的用法。

下面就来实践一下吧,使用Retrofit2库之前,需要添加依赖:

   // Retrofit库
    compile 'com.squareup.retrofit2:retrofit:2.0.2'

由于Retrofit2中已经封装了okhttp,所以其实不需要再去添加okhttp的依赖了。

同时,网络权限也不能忘了:

<uses-permission android:name="android.permission.INTERNET"/>

下面我需要从一个网址去请求数据,比如从下面这个网址:

https://way.jd.com/jisuapi/channel?appkey=cb9fca97f7ad37f2626d2f8a268b04ec

它的返回数据是:

image

接下来创建一个类,用于解析返回数据

可以使用GsonFormat创建,创建类NewsTypeBean.class

public class NewsTypeBean {

    private ResultBean result;

    public ResultBean getResult() {
        return result;
    }

    public void setResult(ResultBean result) {
        this.result = result;
    }

    public static class ResultBean {

        private List<String> result;


        public List<String> getResult() {
            return result;
        }

        public void setResult(List<String> result) {
            this.result = result;
        }
    }
}

之后创建用于描述网络请求的接口,在Retrofit中将Http请求抽象成 Java接口采用注解描述网络请求参数和配置网络请求参数 :

public interface GetRequest_interface {
    @GET("channel?appkey=cb9fca97f7ad37f2626d2f8a268b04ec")
    Call<NewsTypeBean> getCall();
}

这里使用的是@Get注解,注解中传递的是URL的后半部分,这里是有许多种设置方法的,详细的在之前的博客地址去了解即可。

接口设置完毕后就是具体使用了,使用步骤如下:

  • 步骤1:创建 Retrofit 实例
 Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://way.jd.com/jisuapi/") // 设置网络请求的Url地址
                .addConverterFactory(GsonConverterFactory.create()) // 设置数据解析器
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) // 支持RxJava平台
                .build();
  • 步骤2:创建网络请求接口实例
        // 创建 网络请求接口 的实例
        GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);

        //对 发送请求 进行封装
        Call<Reception> call = request.getCall();
  • 步骤3:发送网络请求(异步 / 同步)
//发送网络请求(异步)
        call.enqueue(new Callback<Translation>() {
            //请求成功时回调
            @Override
            public void onResponse(Call<Translation> call, Response<Translation> response) {
                //请求处理,输出结果
                response.body().show();
            }

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

// 发送网络请求(同步)
Response<Reception> response = call.execute();
  • 步骤4:处理返回数据。

由于需要用到Gson来解析数据,所以在此之前需要添加依赖:

com.squareup.retrofit2:converter-gson:2.0.2

然后是具体代码MainActivity.class:

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        request();
    }

    private void request(){
        //1.创建Retrofit对象
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://way.jd.com/jisuapi/")
                .addConverterFactory(GsonConverterFactory.create())     //设置使用Gson解析
                .build();

        //2.创建网络请求接口的实例
        GetRequest_interface request_interface = retrofit.create(GetRequest_interface.class);

        //3.对发送请求进行封装
        Call<NewsTypeBean> call = request_interface.getCall();

        //4.发送网络请求(异步)
        call.enqueue(new Callback<NewsTypeBean>() {

            //请求成功时回调
            @Override
            public void onResponse(Call<NewsTypeBean> call, Response<NewsTypeBean> response) {
                NewsTypeBean data = response.body();
                List<String> dataList = data.getResult().getResult();
                Log.e("MainActivity" ,"请求成功");
                for (String title : dataList){
                    Log.e("MainActivity", title);
                }
            }

            //请求失败时回调
            @Override
            public void onFailure(Call<NewsTypeBean> call, Throwable t) {
                Log.e("MainActivity" ,"请求失败" + t.getMessage());
            }
        });
    }

}

看一下打印效果吧:

image

其实这样用的话和okhttp差别不大,但是以后会配合到rxjava使用,所以先了解一下Retrofit2最好。

—————————————————

附一些需要经常用到的东西:

网络请求适配器 Gradle依赖
Gson com.squareup.retrofit2:converter-gson:2.0.2
Jackson com.squareup.retrofit2:converter-jackson:2.0.2
Simple XML com.squareup.retrofit2:converter-simplexml:2.0.2
Protobuf com.squareup.retrofit2:converter-protobuf:2.0.2
Moshi com.squareup.retrofit2:converter-moshi:2.0.2
Wire com.squareup.retrofit2:converter-wire:2.0.2
Scalars com.squareup.retrofit2:converter-scalars:2.0.2

_______________________________________________________________

网络请求适配器 Gradle依赖
guava com.squareup.retrofit2:adapter-guava:2.0.2
Java8 com.squareup.retrofit2:adapter-java8:2.0.2
rxjava com.squareup.retrofit2:adapter-rxjava:2.0.2

猜你喜欢

转载自blog.csdn.net/asjqkkkk/article/details/78632298