Tag: dagger.android

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 […]

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 […]

无法分析: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,但尚未修复。请给出一些见解为什么总是这种情况。 您的帮助将非常感激。提前感谢。

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 […]

在使用Dagger,Room和LiveData时调试DataBinding错误

在我的Android项目中,我使用Android Studio 3.0-beta6,restofit2进行其余调用,Room进行持久化,LiveData进行反应式编程,使用RxJava / RxAndroid。 有几个注释处理器在使用中: android.arch.lifecycle:编译 android.arch.persistence.room:compiler com.google.dagger:匕首编译 com.google.dagger:匕首机器人处理器 org.projectlombok:龙目岛 每当我添加一个新的Retrofit2服务,使用Room注解来模拟类,Room Dao类时,我发现我遇到了一个数据绑定代错误: Error:(3, 27) error: cannot find symbol class DataBindingComponent 一个巨大的“找不到符号”错误的列表已被排除,但我的问题的根本原因往往不是放射。 调试根本原因需要很长时间,因为错误报告似乎非常弱。 在被烧了几次之后,在这种情况下,我使用了一些策略来隔离问题: 搁置我的更改,并以小增量引入更改,并在吹走我的应用程序的构建和模式输出文件夹后,执行干净的重建。 通常这意味着首先引入模型类的变化。 接下来介绍房间需要的Jackson转换器,以便在房间实体模型类中保留非原始类型。 最后介绍了Dao类和Room数据库子类。 检查实体类以确保它们具有@PrimaryKey,@Entity,@TypeConverters Room注释。 确保TypeConverter类指定了转换器类FooConverter,而不是正在转换的类Foo 检查Dao类以确保@Query注释中的tablename中没有复制粘贴错误 但是,有时候我仍然遇到数据生成错误,根本原因是未知的。 我想知道是否有任何好的技术来隔离这个问题的根本原因。 是否有方法打开注释处理器(特别是Room)中的调试日志记录。 TIA对此有任何指导。 我怀疑很多人都面临这种情况。

詹金斯:Android项目未能建立(生成数据绑定/匕首类失败)

我工作场所的安卓团队正试图让詹金斯工作,但詹金斯正在建设项目的麻烦。 该项目使用下面的命令行在我们的开发机器上正确构建,但无法在Jenkins机器上构建。 注意:我们有另外一个项目,詹金斯能够建立包含数据绑定和匕首的项目。 我们收到的错误是 :app:compileDevDebugJavaWithJavac/<some-file-path> – <some_class>:27: error: cannot find symbol import <DaggerGeneratedClass>; 我们知道数据绑定类没有被生成。 如果我们到我们的build目录“intermediates / classes // debug // databinding”,我们看不到任何东西,但是在我们的开发机器上,数据绑定类生成了。 有谁知道如何解决这个问题? 命令行来建立项目 ./gradlew assemble

注入不能与第二个构造函数一起使用

对于我当前的项目,我正在使用Kotlin和Dagger 2.我想在二级构造函数中注入依赖项,但构造函数从未初始化。 class SelectionFragmentModel ():ViewModel(){ lateinit var channelInfosRepository: ChannelInfosRepository @Inject constructor(channelInfosRepository: ChannelInfosRepository) : this(){ this.channelInfosRepository = channelInfosRepository } … } 作为一种解决方法,我目前正在注入主构造函数,但这不是最佳的。 class SelectionFragmentModel @Inject constructor(private val channelInfosRepository: ChannelInfosRepository):ViewModel(){ constructor() : this(ChannelInfosRepository()) … } 我错过了什么吗?

Dagger2 – FragmentSubcomponentBuilder没有实现AndroidInjector.Factory

我正在使用匕首2并试图将我的Android项目从Java转换为Kotlin。 成功构建后,我得到运行时错误: MyFragmentSubcomponentBuilder没有实现AndroidInjector.Factory 用Java这个错误没有出现。 我还注意到,在我的ActivityBuilder模块中,所有方法在构建之后都是未使用的(它们必须在生成的子组件类中使用)。 @Module abstract class ActivityBuilder { // … @ContributesAndroidInjector(modules = arrayOf(MainActivityModule::class,MyFragmentProvider::class)) internal abstract fun bindMainActivity(): MainActivity // this method highlighted with gray color in AndroidStudio as unused } 我如何设置我的项目正确使用匕首2和kotlin? 我的顶级gradle.build: buildscript { ext.kotlin_version = '1.1.51' repositories { jcenter() maven { url 'https://maven.google.com' } mavenCentral() google() maven { url 'https://github.com/uPhyca/stetho-realm/raw/master/maven-repo' } maven […]

Dagger2编译问题在kotlin

我正在尝试使用Dagger2学习依赖注入。 我创建了几个自定义范围和限定符。 我创建了一个应用程序组件,我想要注入某些全局依赖关系,并创建了一个基于活动上下文返回某些实例的Activity组件。 现在,当我尝试在活动中注入全局实例时,出现如下错误: e:/home/arifur/source_code/me/myprojects/Learn/studio/Android/kotlin/FirebaseChat/app/build/tmp/kapt3/stubs/debug/com/example/arifur/firebasechatkotlin/dependecies/component/ActivityComponent.java :7:error:com.google.firebase.auth.FirebaseAuth不能提供@ Provide或@ Produces注释的方法。 E: e:public abstract void inject(@ org.jetbrains.annotations.NotNull()e: ^ e:com.google.firebase.auth.FirebaseAuth在e: com.example.arifur.firebasechatkotlin.BaseActivity.firebaseAuth e: com.example.arifur.firebasechatkotlin.MainActivity在e: com.example.arifur.firebasechatkotlin.dependecies.component.ActivityComponent.inject(P0) w:警告:以下选项未被任何处理器识别:'[kapt.kotlin.generated]'w: e:/home/arifur/source_code/me/myprojects/Learn/studio/Android/kotlin/FirebaseChat/app/src/main/java/com/example/arifur/firebasechatkotlin/BaseActivity.kt:(29,9):Unresolved参考:DaggerActivityComponent e:/home/arifur/source_code/me/myprojects/Learn/studio/Android/kotlin/FirebaseChat/app/src/main/java/com/example/arifur/firebasechatkotlin/FirebaseChatApp.kt:(20,13 ):未解决的参考:DaggerFirebaseComponent e:/home/arifur/source_code/me/myprojects/Learn/studio/Android/kotlin/FirebaseChat/app/src/main/java/com/example/arifur/firebasechatkotlin/MainActivity.kt 🙁 1,1):处理注释时发生了一些错误。 请看上面的错误信息。 预选赛 ActivityContext.kt @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class ActivityContext ApplicationContext.kt @javax.inject.Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class ApplicationContext 领域 ActivityScope.kt @Scope @Retention(AnnotationRetention.SOURCE) annotation class ApplicationScope ApplicationScope.kt @Scope @Retention(AnnotationRetention.SOURCE) annotation class ApplicationScope 组件 […]

Kapt,Kotlin,Dagger2批注处理时出错

在使用kotlin在项目中添加com.google.dagger:dagger-android-support依赖项后,我收到了这个gradle错误。 这是我构建gradle build.gradle的一部分 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'realm-android' apply plugin: 'me.tatarka.retrolambda' apply plugin: 'kotlin-kapt' android { … kapt { generateStubs = true } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) … kapt "com.google.dagger:dagger-compiler:${daggerVersion}" kapt "com.google.dagger:dagger-android-processor:${daggerVersion}" compile "com.google.dagger:dagger:${daggerVersion}" compile "com.google.dagger:dagger-android-support:${daggerVersion}" … } 这里是我得到的gradle错误 […]