未使用dagger2在ViewModel中注入改造服务类

问题描述

我试图在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属性服务尚未初始化”

解决方法

  1. 首先定义一个以ViewModel作为参数的方法

    @Singleton
    @Component(modules = [NetworkingModule::class]) 
    interface ApplicationComponent {
    public void injectInViewModel(ViewModel viewModel); }
  1. Makeviewmodel块内的init中投影并构建组件。
    init{
               mComponent = DaggerApplicationComponent.create().injectInViewModel(this);
           }
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...