在应用程序中初始化Retrofit客户端
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在应用程序中初始化Retrofit客户端相关的知识,希望对你有一定的参考价值。
如下?
val retro: Retro by lazy {
PilotApp.retro!!
}
class PilotApp : Application() {
companion object {
var retro: Retro? = null
}
override fun onCreate() {
retro = Retro(applicationContext)
super.onCreate()
}
}
这是一种很好的初始化方式吗?提前致谢。
答案
这不符合“控制倒置”的规则,这不是一个好主意。
这不是一个好主意的原因是因为每当一个类(如ViewModel,Fragment或Activity或......)想要使用retro
时,他们必须通过调用第一行(PilotApp.retro
)来获取Retro对象。
替代方案(称为Dependency Injection / Inversiondency Inversion)是在初始化时将Retro对象赋予类(同样,ViewModel或其他)。
这很重要的原因是因为使用第二种方法,您可以使您的类使用Retro,可测试。你可以给他们做你想做的RetroMock或TestRetro(例如,模拟一个api来返回一个错误)。
对于你的例子的另一个注意事项,你不需要使复古可以为空,你应该使你的var为lateinit
并使其为非null。
以上是关于在应用程序中初始化Retrofit客户端的主要内容,如果未能解决你的问题,请参考以下文章
Android Retrofit 更新 HTTP 客户端配置
当我使用 Retrofit 时,Google 位置服务返回一个空位置
java.lang.NoClassDefFoundError: retrofit2.Retrofit$Builder Fabric 初始化