2016-11-22 3 views
2

I Dagger 2 für DI studiert, und ich habe gerade diesen Code das Retrofit zu injizieren:Dolch + Kotlin Injektion nicht

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() 

    } 
} 

Dann in meiner Tätigkeit:

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) 
    } 

} 

So sollte dieser Code arbeiten, nicht wahr? Die Abhängigkeit sollte hinzugefügt werden ... Aber wenn ich meine app laufen ... ich diese:

kotlin.UninitializedPropertyAccessException: lateinit property mRetrofit has not been initialized 

So wird die Nachrüstung nicht eingespritzt wird. Was vermisse ich?

Jede Hilfe ist willkommen!

Antwort

11
fun inject(activity: Activity) 

sollte

sein
fun inject(activity: TrashCansInfoActivity) 
+0

Es funktionierte. Vielen Dank! –

Verwandte Themen