美文网首页
Android学习:Retrofit构建器的最佳写法

Android学习:Retrofit构建器的最佳写法

作者: android不是安卓 | 来源:发表于2022-04-28 20:32 被阅读0次

学完了Retrofit基本用法,但是里面还有一个问题,就是获取Service接口的动态代理对象比较麻烦。大致代码如下:

        val retrofit = Retrofit.Builder()
            .baseUrl("http://10.0.0.2/")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
        val appService = retrofit.create(AppService::class.java)

想要得到AppService的动态代理对象,需要先使用Retrofit.Builder构建出一个Retrofit对象,然后再调用Retrofit对象的create()方法创建动态代理对象。只写一次还好,但每次调用服务器接口时都要写一遍的话,就比较麻烦了。

事实上,确实也不用每次都写一遍,因为构建出的Retrofit对象是全局通用的,只需要在调用create()方法时针对不同的Service接口传入相应的Class类型即可。因此,我们可以将通用的这部分功能封装起来,从而简化获取Service接口动态代理对象的过程。

新建一个ServiceCreator单例类,代码如下所示:

object ServiceCreator {
    private const val BASE_URL = "http://10.0.2.2/"
    private val retrofit = Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build()

    fun <T> create(serviceClass: Class<T>): T = retrofit.create(serviceClass)
}

内部定义了一个常量BASE_URL,指定Retrofit的根路径。然后构建Retrofit对象。最后,提供了一个外部可见的create()方法,并接收一个Class类型的参数。当在外部调用这个方法时,实际上就是调用了Retrofit对象的create()方法,从而创建出相应Service接口的动态代理对象。

经过这样的封装之后,Retrofit的用法将会变得简单,比如获取一个AppService接口的动态代理对象,只需要:

val appService = ServiceCreator.create(AppService::class.java)

之后就可以调用AppService接口中定义的方法了。

泛型实化优化:

我们还可以通过泛型实化功能来继续优化代码:

object ServiceCreator {
    ......
    inline fun <reified T> create(): T = create(T::class.java)
}

这里又定义了一个不带参数的create()方法,并使用inline关键字来修饰方法,reified关键字来修饰泛型,这是泛型实化的两大前提条件。

接下来就可以使用T::class.java这种语法了,然后调用上面定义的带有Class参数的create()方法。

此时就有了新的方式获取AppService接口的动态代理对象了:

val appService = ServiceCreator.create<AppService>()

相关文章

  • Android学习:Retrofit构建器的最佳写法

    学完了Retrofit基本用法,但是里面还有一个问题,就是获取Service接口的动态代理对象比较麻烦。大致代码如...

  • CSS规范 - 最佳实践

    CSS规范 - 最佳实践 最佳选择器写法(模块)

  • koa 源码通读

    一、构建http服务器 NodeJS原生写法 koa写法 相比这段代码你们都非常熟悉了,都是构建一个http服务器...

  • RxJava

    给 Android 开发者的 RxJava 详解 RxJava 与 Retrofit 结合的最佳实践 RxJava...

  • Android技术文章

    Android 内存泄漏案例和解析 RxJava 与 Retrofit 结合的最佳实践 APK瘦身记,如何实现高达...

  • 一步步封装实现自己的网络请求框架

    一、前言 现如今 Android 领域流行的网络请求框架基本都是用 Retrofit 加 RxJava 来搭配构建...

  • Retrofit源码解析

    Retrofit在代码中的构建方式 根据构建方式,我们先来看一下Retrofit类源码 (1)Retrofit中的...

  • Android 探讨一下Retrofit封装的最佳姿势

    在上一篇文章《Android Retrofit + RxJava使用详解》中,我们学习了Retrofit的一些基本...

  • Android中ClassLoader类加载机制

    Android中apk的构建过程 如图 所示,典型 Android 应用模块的构建流程通常依循下列步骤: 编译器将...

  • Retrofit

    根据这张思维导图,我们开始这篇文章的学习 Retrofit到底是什么 Retrofit主要是对Android网络请...

网友评论

      本文标题:Android学习:Retrofit构建器的最佳写法

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