美文网首页
Retrofit2的使用

Retrofit2的使用

作者: 笔墨Android | 来源:发表于2017-09-16 18:07 被阅读0次

    不怕跌倒,所以飞翔

    参考文献:
    Retrofit2.0使用详解
    Retrofit 2.0 注解篇

    1.Retrofit2的简单使用:

    1.不用说关联类库:

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

    这里我引入的是最新的你也可以看看最新的是什么版本

    2.定义接口

    这个接口主要写请求是用到的一些数据

    public interface RetrofitApi {
    
        @GET("repos/{owner}/{repo}/contributors")
        Call<String> contributorsBySimpleGetCall(@Part("owner") String owner, @Path("repo") String repo);
    }
    

    这里面是采用注释的形式去关联网络请求的,其实关于Retrofit2的网络请求都是基于注释去进行了,具体的原理我也不太清楚,等到自己技术层次提升的时候在去进行研究把。。。

    3.创建Retrofit对象

            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("https://api.github.com/")
                    .build();
    

    这里注意Url地址后面的"/"号这个一定要有!如果你想要在那个接口中加是不行的!

    4.构建请求接口的实体

           RetrofitApi retrofitApi = retrofit.create(RetrofitApi.class);
    

    这个实体是根据上面那个接口生成的;

    5.创建请求

    Call<ResponseBody> responseBodyCall = retrofitApi.contributorsBySimpleGetCall("square", "retrofit");
    

    这里主要是完善请求的参数,或者请求的具体内容

    6.创建回调

     responseBodyCall.enqueue(new Callback<ResponseBody>() {
                @Override
                public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                    Log.e(TAG, "onResponse: 成功" + response.body());
               }
    
                @Override
                public void onFailure(Call<ResponseBody> call, Throwable t) {
                    Log.e(TAG, "onFailure: 失败" + t.toString());
                }
            });
    

    7.清除请求

    responseBodyCall.cancel();
    

    以上就完成了基本的请求,回调是回调到主线程的,这点的话比OkHttp3好点!

    下面来说说常用的注解:

    1.请求方法注解

    序号 名称
    @GET get请求
    @POST post请求

    常用的请求就这两个,其他的我就没写,这些注解都是用在方法体前面的,用于标明请求的方法

        @GET("repos/{owner}/{repo}/contributors")
        Call<String> contributorsBySimpleGetCall(@Part("owner") String owner, @Path("repo") String repo);
    

    2.@path注解

    这个的作用和占位符的作用类似,

        @GET("repos/{owner}/{repo}/contributors")
        Call<String> contributorsBySimpleGetCall(@Part("owner") String owner, @Path("repo") String repo);
    

    还是那这个方法举例,上面用或括号括起来的就相当于占位,具体的定义值实在下面进行的通过@Path替换花括号内的名称。

    3.@Query和@QueryMap(用于GET请求的注解)

    这两个是将请求参数加载末尾的方法;

    @GET("users/stven0king/repos")
    Call<List<Repo>> listRepos(@Query("time") long time);
    
    @GET("users/stven0king/repos")
    Call<List<Repo>> listRepos(@QueryMap Map<String, String> params);
    

    区别在于@Query后面跟的是一个参数而@Query后面跟的是一个数组,也就是多个参数

    4.@Field和@FieldMap(用于POST请求的注解)

    @FormUrlEncoded
    @POST("users/stven0king/repos")
    Call<List<Repo>> listRepos(@Field("time") long time);
    
    @FormUrlEncoded
    @POST("users/stven0king/repos")
    Call<List<Repo>> listRepos(@FieldMap Map<String, String> params);
    

    这里要注意上面的@FormUrlEncoded如果没有这个的话会抛异常的

    5.@Url(用于动态的Url地址请求)

    @GET
    Call<List<Repo>> listRepos(@Url String user);
    

    其他操作符的话以后用到的时候再去研究把。。。

    相关文章

      网友评论

          本文标题:Retrofit2的使用

          本文链接:https://www.haomeiwen.com/subject/zvnysxtx.html