Tag: dagger 2

Dagger 2将命名对象注入到一个Activity中

我有一种感觉,这是对Dagger如何工作的一个简单的误解。 唉,我无法find问题。 我有几个GotIt像卡,我想要使用全部。 为此,我使用了一个模型,其中包括图标,正文文本,动作文本和动作点击处理程序。 各种活动使用不同的适配器来表示状态。 现在我正在关注一张卡片,告诉用户何时缺少位置权限。 我想要做的是创建一个模块,提供各种卡,我有(使用Kotlin): @Module class GotItCardModule { @Provides @Singleton @Named(Manifest.permission.ACCESS_FINE_LOCATION) fun provideLocationGotItCard(application: Application): GotItViewHolder.GotItCard { val icon = ResourcesCompat.getDrawable(application.resources, R.drawable.ic_location_off_black_24dp, null)?.apply { DrawableCompat.setTint(this, Color.WHITE) } return GotItViewHolder.GotItCard( iconDrawable = icon, bodyText = application.getString(R.string.location_permission_gotit_body), primaryButtonText = application.getString(R.string.location_permission_gotit_action_primary), primaryButtonCallback = View.OnClickListener { v -> (v.context as? Activity)?.let { activity -> ActivityCompat.requestPermissions(activity, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), RequestCode.Permission.ACCESS_FINE_LOCATION) […]

Kotlin和Dagger 2:使用Provider类的问题

在网上冲浪之后,似乎没有类似的问题,它正在吃掉我。 在学习使用Dagger 2进行dependency injection的过程中,我试图将Java的一个例子翻译成Kotlin。 该项目在Java编译罚款,但使用Kotlin,不喜欢javax.inject.Provider类,并无法建立。 什么不见​​了? 这里的提供者类的使用是否对Kotlin不正确? 这是Gradle事件日志中的错误: repositorytrends\custom_implementations\RepoTrendsAppComponent.java:8: error: java.util.Map<java.lang.Class,? extends javax.inject.Provider<dagger.android.AndroidInjector.Factory>> cannot be provided without an @Provides-annotated method. 这是有问题的文件。 内部构造函数的参数(Map)是成功构建的决定因素: class ActivityInjector @Inject internal constructor(private val activityInjectors: Map<Class, Provider<AndroidInjector.Factory>>){ private val cache = HashMap<String, AndroidInjector>() internal fun inject(activity: Activity) { if (activity !is RepoTrendActivity) { throw IllegalArgumentException(“Activity must extend BaseActivity”) } val instanceId […]

如何避免与Dagger 2的循环依赖?

我有以下模块: @Module class HomeModule(private val context: Context) { @Provides fun provideContext() = context @Provides fun provideHomeUi(): HomeUi { return HomeUi() } @Provides @Singleton fun provideHomePresenter(homeUi: HomeUi): HomePresenter { return HomePresenter(homeUi) } } HomeUi.kt注入字段 @Inject lateinit var context: Context @Inject lateinit var presenter: HomePresenter 而这个在HomePresenter.kt @Inject lateinit var context: Context 在这里我的Deps组件 @Singleton @Component(modules = arrayOf( NetworkModule::class, […]

Android上的Dagger 2,缺少错误信息

我在我的Android项目中使用Dagger 2,并且在调试时遇到了麻烦。 我知道编译失败,因为我的匕首2设置(之前有过)的错误,但它几乎是不可能的,因为我没有得到一个正确的错误信息告诉我问题在哪里。 我所得到的是显示注释处理失败的消息。 沿着: Error:Execution failed for task ‘:app:compileDebugJavaWithJavac’. > Compilation failed; see the compiler error output for details. Error:(14, 28) error: cannot find symbol class BR Error:(17, 40) error: package com.some.package.databinding does not exist Error:(17, 51) error: cannot find symbol class DaggerSomeComponent … 也许这与我正在使用数据绑定的事实有某种关系! 我使用的是Dagger 2.5,Gradle插件2.1.2和android-apt 1.8。 谢谢你的帮助!

android.support.v4.app.FragmentManager不能提供@ Provide或@ Produces注解的方法

所以我对Dagger很陌生,试图通过活动加上独立片段和独立导航来“Kotlin”MVP项目的“daggerify”。 事实上,我使用基于支持lib的Fragment的好几个视图让我尝试最近的匕首Android支持function。 经过一些与构件图构建挣扎后,我遇到了这个错误代表的问题: e: …\MyApp\app\build\tmp\kapt3\stubs\debug\com\…\di\app\MyAppComponent.java:6: error: [dagger.android.AndroidInjector.inject(T)] android.support.v4.app.FragmentManager cannot be provided without an @Provides- or @Produces-annotated method. e: e: public abstract interface MyAppComponent extends dagger.android.AndroidInjector { e: ^ e: android.support.v4.app.FragmentManager is injected at e: myapp.ui.common.BaseActivity.fragmentManager e: myapp.ui.main.MainActivity is injected at e: dagger.android.AndroidInjector.inject(arg0) e: java.lang.IllegalStateException: failed to analyze: org.jetbrains.kotlin.kapt3.diagnostic.KaptError: Error while annotation processing at org.jetbrains.kotlin.analyzer.AnalysisResult.throwIfError(AnalysisResult.kt:57) at […]

未使用@绑定匕首的方法

我有以下定义的Splash屏幕活动: @Subcomponent(modules = arrayOf( SplashActivitySubcomponent.ComponentModule::class) ) interface SplashActivitySubcomponent : AndroidInjector { @Subcomponent.Builder abstract class Builder : AndroidInjector.Builder() @Module abstract class ComponentModule { @Binds @IntoMap @ActivityKey(SplashActivity::class) abstract fun bindSplashActivityInjectorFactory(builder: SplashActivitySubcomponent.Builder): AndroidInjector.Factory } } 我在活动中没有片段。 会发生什么是bindSplashActivityInjectorFactory未使用。 问题是我无法摆脱它,否则应用程序在运行时崩溃。 使用 @Suppress(“unused”) 是不够的,因为我仍然从kotlin-lint得到警告。 为什么在不使用时需要定义这个方法? 我能做些什么来避免这种警告? 这是我得到的错误: UnnecessaryAbstractClass – [ComponentModule] at com / xxxx / splash / di / SplashActivitySubcomponent.kt:20:5 OptionalAbstractKeyword […]

无法分析:org.jetbrains.kotlin.kapt3.diagnostic.KaptError:批注处理时出错

我正在探索Android支持的Dagger生命周期在Kotlin中注入依赖,但他们总是无法生成匕首依赖代码。 错误信息如下: public abstract interface MainComponent { ^ java.lang.IllegalStateException: failed to analyze: org.jetbrains.kotlin.kapt3.diagnostic.KaptError: Error while annotation processing 这里是MainComponent.kt的附件 @Singleton @Component(modules = arrayOf(AndroidSupportInjectionModule::class,AndroidInjectionModule::class,AppModule::class, NetworkModule::class, ActivityBuilder::class)) open interface MainComponent{ @Component.Builder interface Builder { @BindsInstance fun application(application: Application): Builder fun build(): MainComponent } fun inject(app: ActifyApplication) } 我尝试了不同的解决方案,像kapt在应用程序级别gradle中启用true,但尚未修复。请给出一些见解为什么总是这种情况。 您的帮助将非常感激。提前感谢。

如何在数据模块中使用Android Kotlin Dagger 2和Firebase Auth?

我试图建立一个应用程序,其中data模块是一个库和presentation层是实际的Android应用程序。 理想情况下,我希望firebase依赖项仅存在于data模块中,但apply plugin: ‘com.google.gms.google-services’只能从presentation模块调用apply plugin: ‘com.google.gms.google-services’ 。 把匕首2和Firebase依赖关系放在一起给了我下面的错误: FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ‘:presentation:transformDexArchiveWithExternalLibsDexMergerForDebug’. > java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex 删除Firebase身份validation依赖关系或匕首2依赖关系可解决此问题。 如何在data模块中同时使用这两个库? 我的build.gradle data apply plugin: ‘com.android.library’ apply plugin: ‘kotlin-android’ apply plugin: ‘kotlin-android-extensions’ apply plugin: ‘kotlin-kapt’ android { compileSdkVersion 26 buildToolsVersion ‘26.0.2’ defaultConfig { minSdkVersion […]

Kotlin + Dagger注入问题取决于设备的Android版本/ SDK(?)

上周,在我现在的Kotlin MVP项目中实施Dagger的时候,我正在使用KitKat 4.4.2在老式手机上进行测试(因为主要手机的维护,它仍然支持所有主要的function和东西)。 所以那一周我遇到了一些典型的问题,而不是一些不寻常的事情,通过调查提供的错误,或多或少地快速解决问题 终于,代码编译,当前的项目版本建成没有问题,没有运行与UI交互KitKat的重大错误。 但是,当我从维修中心拿走了带有Nougat 7.1.2的主电话并启动了应用程序时,我陷入了奇怪的DI相关问题。 之后,我也在mate的Marshmallow 6.0上推出了应用程序,并且又抓了一个,完全一样。 这个问题简单描述如下: 应用程序(成功)启动; 我能够操作通过上下文和fragmentManager注入提供的ViewPager / DrawerLayout / etc uifunction; 所有的服务也可以按照预期的方式进行注射。 当我抽动Activity的Presenter时,应用程序崩溃。 而现在最有趣的部分,这让我疯狂:所有可访问的类,不带来任何问题,通过构造注入注入。 但是,使用字段注入注入的Presenter实例在需要时不会被初始化 。 当然,我试图不使用lateinit修饰符,并注入它像@JvmField可空字段或没有它:结果是相同的 – 它根本不被注入。 由于问题与Activity有关,我有“自然约束”不使用主要构造函数注入。 这是一个例外情况,除了第一个字符串外,对我来说不是很有帮助。 kotlin.UninitializedPropertyAccessException: lateinit property presenter has not been initialized at .ui.common.view.BaseViewActivity.getPresenter(BaseViewActivity.kt:14) at .ui.main.view.MainActivity.onPlaceTypeClick(MainActivity.kt:143) at .ui.types.nearby.view.NearbyPlaceTypeItemViewHolder$bind$1.onClick(NearbyPlaceTypeItemViewHolder.kt:32) at android.view.View.performClick(View.java:5647) at android.view.View$PerformClick.run(View.java:22462) at android.os.Handler.handleCallback(Handler.java:754) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:163) at android.app.ActivityThread.main(ActivityThread.java:6205) at java.lang.reflect.Method.invoke(Native […]

应用; 曾经使用过不同的AppComponent; 在预先验证期间

我在一台设备上运行我的espresso测试时出现问题 – 出现以下错误: W/dalvikvm(10180): Class resolved by unexpected DEX: Lorg/ligi/passandroid/App;(0x43876120):0x660f9000 ref [Lorg/ligi/passandroid/AppComponent;] Lorg/ligi/passandroid/AppComponent;(0x43876120):0x64e2f000 W/dalvikvm(10180): (Lorg/ligi/passandroid/App; had used a different Lorg/ligi/passandroid/AppComponent; during pre-verification) D/AndroidRuntime(10180): Shutting down VM W/dalvikvm(10180): threadid=1: thread exiting with uncaught exception (group=0x433101a0) E/MonitoringInstrumentation(10180): Exception encountered by: Thread[main,5,main]. Dumping thread state to outputs and pining for the fjords. E/MonitoringInstrumentation(10180): java.lang.IllegalAccessError: Class ref in pre-verified […]