zoukankan      html  css  js  c++  java
  • Retrofit总结(原)

    1、Retrofit的作用  

      A type-safe HTTP client for Android and Java

      看到这句话时候在想什么是类型安全?

      百度一下:类型安全代码指访问被授权可以访问的内存位置。例如,类型安全代码不能从其他对象的私有字段读取值。它只从定义完善的允许方式访问类型才能读取。类型安全的代码具备定义良好的数据类型

      所以看起来Retrofit定义类型安全的含义应该在于它的接口返回类型是用户定义好的,类型是安全的。

      Retrofit将网络请求封装起来,用户不需要怎么进行网络请求,只需要定义返回数据类型,给出url,框架就可以保证当用户请求时,返回的数据是你想要的数据。

      Retrofit依赖于OkHttp,可以对数据在返回时进行预处理等。

    2、Retrofit的原理

    3、Retrofit的实现

      Retrofit使用Builder模式来进行创建,使用Call.Factory执行网络请求(默认实现OkHttpClient)。用户如果需要使用自己的网络请求,需要实现Call.Factory,并调用Builder中的

    callFactory进入赋值。

      用户主要需要实现或者定义4个接口:Callback,Converter,CallAdapter,Call;

      Callback用于数据返回后的回调;

    call.enqueue(new Callback<MovieSubject>() {
                @Override
                public void onResponse(Call<MovieSubject> call, Response<MovieSubject> response) {
    //                mMovieAdapter.setMovies(response.body().subjects);
    //                mMovieAdapter.notifyDataSetChanged();
                    //ok.
                }
                @Override
                public void onFailure(Call<MovieSubject> call, Throwable t) {
                    t.printStackTrace();
                }
            });
    

      

      Converter用于请求返回时的数据预处理;  

      CallAdapter用户自定义用户实现Call的过程,主要使用Adapter模式和工厂模式。在默认的ExecutorCallAdapterFactory中还使用了delegate模式进行call的实现,其中定义了Call执行的Executor。

      Call是Retrofit定义的调用网络框架的地方,直接与Okhttp交互。

      Retrofit中有一个重要的类ServiceMethod,这个类串联了CallAdapter和Method,在Retrofit中进行了缓存。

      Retrofit默认使用MainLooper的Handler处理消息,用户可以自定义处理线程。

      

    4、Retrofit的流程(看不清楚时建议下载或者图片另起网址打开)

    5、Retrofit的使用

      5.1 Retrofit turns your HTTP API into a Java interface.  

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

      5.2 The Retrofit class generates an implementation of the GitHubService interface.

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

      5.3 Each Call from the created GitHubService can make a synchronous or asynchronous HTTP request to the remote webserver. 

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

         5.4 sync and async

      sync:  repos.execute(new Callback(){...});
      async:  repos.enqueue(new Callback(){...});
  • 相关阅读:
    Mac sublime安装package controller
    git 指定从其他分支拉取commit
    一台电脑多个git使用 push 时候出现denied
    hibernate class cast exception from object to ...
    PostgreSQL数据类型
    spring 注入失败
    angularJS seed 安装
    PowerMockito(PowerMock用法)
    powermockito “mock public 方法内部 Private方法的问题”
    快速创建maven 工程:simple java工程,webapp
  • 原文地址:https://www.cnblogs.com/weizhxa/p/9766157.html
Copyright © 2011-2022 走看看