Android开发笔记:Retrofit的使用

来源:互联网 发布:apache tomcat安装教程 编辑:程序博客网 时间:2024/06/07 00:41

Retrofit 使用记录

简单的说,Retrofit是一个网络请求框架,是对OkHttp的一层封装,可以直接集成到项目中作为网络层使用。

使用入门

Retrofit使用还是很简单的,官网也不过1页的内容而已,Retrofit官网传送。这里记录一下,入门使用,以及请求注解和参数注解的具体含义用法。

添加gradle引用

    compile 'com.squareup.retrofit2:retrofit:2.3.0'

创建Retrofit

private Retrofit mRetrofit;mRetrofit = new Retrofit.Builder()                .baseUrl("http://www.mocky.io/") //注意,这里的baseUrl 要以 / 结尾。                .build();

以上创建了一个Retrofit对象,简单到3行代码便可以搞定。有了mRetrofit,下一步便是定义请求接口。

public interface NetApiService {    @GET("v2/599065cc1200005300946379") //  url    Call<ResponseBody> getResponseBody();    // 定义了具体请求的方法,通过Retrofit可以拿到接口的代理类,去做具体的请求操作。    // 返回Call类型,泛型是ResponseBody; ResponseBody是OkHttp3中的数据模型,也是Retrofit不添加解析Factory时,默认支持的返回类型。}

接下来就是直接请求网络了

 NetApiService netApiService = mRetrofit.create(NetApiService.class);        // 不添加 ConverterFactory时,Retrofit默认支持的泛型ResponseBody;        Call<ResponseBody> call = netApiService.getStudentInfoResponseBody();        call.enqueue(new Callback<ResponseBody>() {            @Override            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {                try {                    Log.i(TAG, "onResponse: " + response.body().string());                } catch (IOException e) {                    e.printStackTrace();                }            }            public void onFailure(Call<ResponseBody> call, Throwable t) {                Log.e(TAG, "onFailure: ", t);            }        });

我们在这里直接使用了Retrofit默认支持的Call 泛型类型ResponseBody,,但是我们在实际的开发中,网络请求返回的数据类型是多样的,而且Call 既然有了泛型参数了,那肯定可以支持自定义Model实体类的,那具体来看下如何添加支持。

添加ConvertFactory

前边说了,Retrofit默认支持的返回值类型是ResponseBody,如果我们想添加自己的实体类型怎么办了。Retrofit当然也提供了支持,只需要添加对Gson的支持即可,具体的实体类型转换,交给Gson。

当然也需要在Gradle添加以下引用。

compile 'com.squareup.retrofit2:converter-gson:2.3.0' //注意这里,版本是要与Retrofit相对应的。

gradle同步一下后,我们来改造下Retrofit的创建。添加对GsonConverterFactory的支持

 mRetrofit = new Retrofit.Builder()                .baseUrl("http://www.mocky.io/")                .addConverterFactory(GsonConverterFactory.create())//添加GsonConverterFactory,对Gson的支持,                .build();

这是我们可以对请求接口以及具体的请求call改变一下泛型,请求数据后就可以直接拿到具体的实体类了。

除了以上GsonConverterFactory,Retrofit还支持了以下ConverterFactory的支持。

以下convert - Gson com.squareup.retrofit2:converter-gson Jackson com.squareup.retrofit2:converter-jackson Moshi com.squareup.retrofit2:converter-moshi Protobuf com.squareup.retrofit2:converter-protobuf Wire com.squareup.retrofit2:converter-wire Simple XML com.squareup.retrofit2:converter-simplexml Scalars(primitives, boxed, and String) com.squareup.retrofit2:converter-scalars

有时我们需要的返回值可能不需要直接返回实体类,只需要一个字符串,或者只有”xxxxx”,这样的一个返回,而不是标准的JSON格式,这个时候,我们可以使用ScalarsConverterFactory,Call 泛型为String,而且此ScalarsConverterFactory是要放到GsonConverterFactory 之前添加个Retrofit,要不然会异常。

 mRetrofit = new Retrofit.Builder()                .baseUrl(RetrofitApi.TEST_HOST_URL)                .addConverterFactory(ScalarsConverterFactory.create())                .addConverterFactory(GsonConverterFactory.create())                .build();

Retrofit注解使用

请求方法注解

Retrofit请求方法的注解,对应的是HTTP的请求方法。包含GETPOST,PUT,DELETE,HEAD,OPTIONS,PATCH。另一个特殊的注解HTTP,它作为了Retrofit的一个拓展,是包含以上6种请求方法的,为实现不同请求方法,该注解提供了三个属性:method,path,hasbody.

HTTP注解具体用法:

public interface NetApiService {    @HTTP(method = "GET", path = "v2/{id}", hasBody = false)    Call<ResponseBody> getResponseBody(@Path("id") int id);    // hasBody 表示是否有请求体}

请求参数注解

Headers:添加请求头

Header:添加固定的头

Body:非表单的请求体,实体类,

Field、FieldMap:向POST表单传入键值对。

Part、PartMap:适用于表单字段,文件上传等。

Query、QueryMap:用于表单字段。

Path:URL缺省值

URL:URL设置。

…具体实例,以后补充添加。

原创粉丝点击