翻新抽象库

时间:2019-06-09 08:11:17

标签: android retrofit retrofit2 abstraction android-networking

我在Retrofit Network Library上写了一层抽象,以便我们可以随时更改Retrofit,而对应用程序代码没有太大影响。

enter image description here

我们通常会编写一个接口和Retrofit实现来与网络交互。 enter image description here

要使用Retrofit,我们创建一个映射到服务器API的Java接口,并使用如下所示的Retrofit类获取它的实例

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

Retrofit类生成GitHubService接口的实现。

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

GitHubService service = retrofit.create(GitHubService.class);

致电远程Web服务器。

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

任何指针如何根据接收到的请求由Abstraction库在内部构建这些接口,或者有没有更好的方法为其编写抽象?

我希望传达的观点是,我们使用Retrofit的方式有些不同,因为它期望接口与我们的应用程序不知道的注释一起使用。否则,我们的应用程序将与Retrofit批注和Call等类紧密结合(请参见返回类型)。

1 个答案:

答案 0 :(得分:0)

听起来像您刚计划在Retrofit之上编写Retrofit。 通常,您不受限于“呼叫”之类的特定改装类。 Retrofit的伟大之处在于它的灵活性,它具有适用于几乎所有设备的适配器。您可以扩展它们并获得所需的任何行为:

例如,您可以使用CallAdapter.Factory.来使Retrofit接口返回特定的Object而不是Call,如下所示:

List<Repo> listRepos(@Path("user") String user);

这里是一些用法example。不确定是您的情况,还是为了展示这个主意。

一般来说,在库顶部创建包装器之前,我建议探索其他扩展点的Retrofit源代码,其中有很多。