美文网首页
Retrofit基本使用

Retrofit基本使用

作者: DASH_1024 | 来源:发表于2019-06-23 23:04 被阅读0次

    Retrofit是由著名的 Square 公司开源的一个基于OkHttp实现网络请求的框架,以其简易的接口配置、强大的扩展支持、优雅的代码结构受到大家的追捧。

    与OkHttp的关系

    Retrofit2.0中网络请求部分有OkHttp实现,其框架层主要实现了接口层的封装,对RESTful风格拥有完美的支持。


    架构图.png

    其中Retrofit层实现RESTful接口的封装,OkHttp全权负责与服务器的交互。Retrofit与OkHttp完全耦合。

    使用

    首先引入Retrofit包和OkHttp包

    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
    implementation 'com.squareup.okhttp3:okhttp:3.8.0'
    

    按照Retrofit官网的例子,定义访问Github的接口

    public interface GitHubService {
      @GET("users/{user}/repos")
      Call<List<Repo>> listRepos(@Path("user") String user);
    }
    

    Retrofit对域名及参数进行了封装,相当于访问

    https://api.github.com/users/{user}/repos
    

    listRepos方法中可以传入相应的用户名
    接下来,构造 Retrofit

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

    调用listRepos方法

    Call<List<Repo>> repos = service.listRepos("octocat");
    

    执行网络请求

    // 同步调用
    List<Repo> data = repos.execute(); 
    
    // 异步调用
    repos.enqueue(new Callback<List<Repo>>() {
        @Override
        public void onResponse(Call<List<Repo>> call, Response<List<Repo>> response) {
          List<Repo> data = response.body();
        }
    
        @Override
        public void onFailure(Call<List<Repo>> call, Throwable t) {
          t.printStackTrace();
        }
    });
    

    RESTful接口封装

    Retrofit对RESTful风格接口具有完美的封装,在Retrofit中,各种网络请求方式及参数都使用了注解,大大简化的调用难度。
    网络请求方式主要有以下几种:

    • @GET
    • @POST
    • @PUT
    • @DELETE
    • @PATCH
    • @HEAD

    GET请求

    @GET("users/{user}/repos")
    Call<List<Repo>> listRepos(
        @Path("user") String user
        @Query("password") String password
    );
    

    其中@Path可以灵活传入path路径参数,@Query传入需要传入的请求参数值,当请求参数较多或有些参数不用传时,可以使用@QueryMap灵活实现。

    POST请求

    @FormUrlEncoded
    @POST("/")
    Call<ResponseBody> example(
       @Field("name") String name,
       @Field("occupation") String occupation
    );
    

    POST请求中当需要使用表单形式传参时,可使用@FormUrlEncoded进行标记。传入的参数使用@Field进行标记,当传入参数较多或有些参数不用传时,可以使用@FieldMap灵活实现。

    PUT请求

    @FormUrlEncoded
    @PUT("sys/user/resetPassword")
    Call<ResponseBody> resetPassword(
        @Field("telephone") String telephone,
        @Field("password") String pwd
    );
    

    当需要修改服务器上的某些信息时,我们可以使用PUT请求,其使用方式类似于POST请求。

    相关文章

      网友评论

          本文标题:Retrofit基本使用

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