gpt4 book ai didi

java - 将 dagger2 与 Retrofit 和 MVVM 结合使用

转载 作者:行者123 更新时间:2023-12-02 02:22:34 26 4
gpt4 key购买 nike

我尝试在我的应用中使用 DaggerRetrofitVMMV 结构,但我不知道如何使用在这种情况下进行改造。我有我的模块和接口(interface),我可以在其中实现对 API 的调用。我之前使用过 Dagger,我认为我应该有一个组件将我的 ApiCalls 与我想要使用它的 MainViewModel 连接起来。我的方法正确吗?如果不是,我应该如何与我的 ViewModel 进行绑定(bind)以获取带有凭据的 Observable

我的NetworkModule:

@Module
object NetworkModule{

/**
* Provides the Post service implementation.
* @param retrofit the Retrofit object used to instantiate the service
* @return the Post service implementation.
*/
@Provides
@Reusable
@JvmStatic
fun provideUserAuth(retrofit: Retrofit): ApiCredentials{
return retrofit.create(ApiCredentials::class.java)
}

/**
* Provides the Retrofit object.
* @return the Retrofit object
*/
val provideRetrofit: Retrofit by lazy {
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
}
}

我的 ApiCalls 进行了改造:

interface ApiCredentials {

@get:POST("/api/auth/sign_in")
val getAuthentication: Observable<Credentials>
}

我的MainViewModel:

class MainViewModel : ViewModel() {
// TODO: Implement the ViewModel
}

最佳答案

您可以创建存储库,在构造函数中您可以获取接口(interface)的引用,并通过一种方法可以在存储库中访问 api。

class ApiRepository @Inject constructor(
private val apiCredentials: ApiCredentials
) {
fun hitApi():Observable<Credentials>{
return apiCredentials.getAuthentication
}
}

在 View 模型中,您可以通过注入(inject)器获取此存储库的对象,例如

@Inject
protected lateinit var repo: ApiRepository

并且在 View 模型中您可以使用它。

关于java - 将 dagger2 与 Retrofit 和 MVVM 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57269654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com