匕首+ Kotlin不注射
我学习DI的Dagger 2,我只是做了这个代码注入改造:
NetModule.kt
@Module class AppModule(val mApplication: Application) { @Provides @Singleton fun provideApplication() : Application{ return mApplication } }
AppModule.kt
@Module class AppModule(val mApplication: Application) { @Provides @Singleton fun provideApplication() : Application{ return mApplication } }
NetComponent.kt:
@Singleton @Component(modules = arrayOf(AppModule::class, NetModule::class)) interface NetComponent { fun inject(activity: Activity) }
CustomApplication.kt
class CustomApplication : Application() { companion object { lateinit var mNetComponent: NetComponent } override fun onCreate() { super.onCreate() AndroidThreeTen.init(this) mNetComponent = DaggerNetComponent.builder() .appModule(AppModule(this)) .netModule(NetModule(getString(R.string.api_base_url))) .build() } }
然后在我的活动中:
class TrashCansInfoActivity : AppCompatActivity(){ @Inject lateinit var mRetrofit: Retrofit override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_trash_cans_info) CustomApplication.mNetComponent.inject(this) setSupportActionBar(toolbar) populateTrashCanList() } private fun populateTrashCanList(){ showProgress(true) mRetrofit.create(ApiClient::class.java) .getTrashCans() .map { it.map { it.toTrashCan() } } .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .doOnError { showProgress(false) Toast.makeText(this, "Erro ao carregar lista de lixeiras", Toast.LENGTH_SHORT).show() }.doOnCompleted { showProgress(false) } .subscribe(behaviorSubject) } }
所以,这个代码应该工作,对吧? 应该添加依赖项…但是当我运行我的应用程序…我得到这个:
kotlin.UninitializedPropertyAccessException: lateinit property mRetrofit has not been initialized
所以改造没有被注入。 我错过了什么?
任何帮助,欢迎!
fun inject(activity: Activity)
应该
fun inject(activity: TrashCansInfoActivity)