我试图在ViewModel中注入改造创建的API服务,如下所示:
class LoginViewModel @Inject constructor() : ViewModel(){
@Inject
lateinit var service: LoginService
var username : String=""
var password : String=""
fun signInClicked(){
if (!Patterns.EMAIL_ADDRESS.matcher(username).matches()){
return
}else if(password.isEmpty()){
return;
}
val call = service?.getCurrentWeatherData("35","139","2e65127e909e178d0af311a81f39948c")
call?.enqueue(object :Callback<Model.WeatherResponse>{
override fun onFailure(call: Call<Model.WeatherResponse>, t: Throwable) {
Log.i("RESPONSE","FAILURE")
}
override fun onResponse(
call: Call<Model.WeatherResponse>,
response: Response<Model.WeatherResponse>
) {
Log.i("RESPONSE","SUCCESS")
}
})
}
}
这是我的匕首模块类
@Module
class NetworkingModule {
@Singleton
@Provides
fun getRetrofit() : Retrofit{
return Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.build()
}
@Singleton
@Provides
fun getLoginAPIService(retrofit: Retrofit):LoginService {
return retrofit.create(LoginService::class.java)
}
}
这是我的Dagger组件
@Singleton
@Component(modules = [NetworkingModule::class])
interface ApplicationComponent {
}
尝试访问LoginViewModel中的服务变量时出现错误“ lateinit属性服务尚未初始化”
答案 0 :(得分:0)
ViewModel
作为参数的方法
@Singleton
@Component(modules = [NetworkingModule::class])
interface ApplicationComponent {
public void injectInViewModel(ViewModel viewModel); }
Make
在viewmodel
块内的init
中投影并构建组件。 init{
mComponent = DaggerApplicationComponent.create().injectInViewModel(this);
}