Tag: 匕首 2

@Provides和@Binds方法在同一个类Kotlin

在匕首2.11之后,我们可以使用一个@Binds注解,并且在这种情况下将我们的模块标记为抽象,这比混凝土更有效率。 如果我的模块同时拥有@Provides和@Binds方法,我有两个选择: 最简单的方法是将你的@Provides实例方法标记为静态。 如果需要将它们保存为实例方法,那么可以将模块拆分为两个,并将所有的@Binds方法抽取到一个抽象模块中。 第二个选项在Java和Kotlin中工作正常,但第一个选项在Java中工作正常,但我不知道如何在Kotlin中实现相同。 如果将@Provides方法移动到Companion对象,则会抛出Error:(30, 1) error: @Provides methods can only be present within a @Module or @ProducerModule 。 Kotlin如何做到这一点。 第二选项:(工作) ApplicationModule.kt @Module(includes = [ApplicationModule.Declarations::class]) abstract class ApplicationModule { @Module internal interface Declarations { @Binds fun bindContext(application: Application): Context } @Provides @Singleton fun provideMvpStarterService(): MvpStarterService { return MvpStarterServiceFactory.makeStarterService() } } 第一个选项:(不工作) ApplicationModule.kt @Module abstract […]

如何在Kotlin中使用Dagger的2 @Named限定符

最近我遇到了Kotlin的@Named限定符问题。 我认为从这个转变为: var boldTypeface: Typeface? = null [Inject] set 进入这个 var boldTypeface: Typeface? = null [Inject Named(“bold”)] set 要么 var boldTypeface: Typeface? = null [Inject] [Named(“bold”)] set 会解决我的问题。 但它没有,甚至没有编译。

@用AndoridInjector和Kotlin在SubComponent中提供方法

我正在使用Dagger2 AndroidInjector和Kotlin。 我有一个这样定义模块的子组件: @Subcomponent(modules = arrayOf( UIModule::class, HomeActivitySubcomponent.ComponentModule::class )) interface HomeActivitySubcomponent : AndroidInjector { @Subcomponent.Builder abstract class Builder : AndroidInjector.Builder() @Module abstract class ComponentModule { @Binds @IntoMap @ActivityKey(HomeActivity::class) internal abstract fun bindMainActivityInjectorFactory(builder: Builder): AndroidInjector.Factory } } 如果这是Java我可以添加一个静态@Provides方法的ComponentModule @Module。 它必须是静态的,因为Dagger抱怨,如果我添加一个非静态方法的@Module类使用@Binds: 错误:@Module可能不包含非静态@Provides方法和抽象@Binds或@Multibinds声明 问题是:如何与Kotlin做到这一点?

匕首与Kotlin上的Mvp – Android

我是刚刚进​​入Kotlin的Android开发人员,我一直试图在Kotlin上设置Mvp Dagger应用程序,但我无法弄清楚发生了什么事情。 我继续得到这个错误: Error:dagger.internal.codegen.ComponentProcessor was unable to process this interface because not all of its dependencies could be resolved. Check for compilation errors or a circular dependency with generated code. 这是我的代码: KotlinApplication: class KotlinApplication: MultiDexApplication(), HasActivityInjector { @Inject lateinit var injector: DispatchingAndroidInjector override fun onCreate() { super.onCreate() inject() } override fun activityInjector(): AndroidInjector { return […]

匕首2在Kotlin未解决的参考DaggerXXXSub

我试图在我的Android项目中使用Dagger 2,我在Kotlin编码。 我在我的项目中使用了Dagger 2,就像Dagger 2 Android中的例子。 应用程序/的build.gradle apply plugin: ‘com.android.application’ apply plugin: ‘kotlin-android’ apply plugin: ‘kotlin-android-extensions’ android { compileSdkVersion 26 buildToolsVersion “26.0.2” defaultConfig { applicationId “com.wj.kotlintest” minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName “1.0” testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } } } dependencies { implementation fileTree(dir: ‘libs’, include: […]

无法用匕首2运行kotlin

我是新手kotlin和匕首2.我尝试在Android Java中遵循本指南 。 但错误是扔… 错误:执行任务’:app:kaptDebugKotlin’失败。 内部编译器错误。 查看日志了解更多详情 我做错了什么? 应用 class App : Application() { val netComponent: NetComponent by lazy { DaggerNetComponent.builder() .appModule(AppModule(this)) // This also corresponds to the name of your module: %component_name%Module .netModule(NetModule(“https://api.github.com”)) .build() } override fun onCreate() { super.onCreate() } fun netComponent() : NetComponent = netComponent } NetComponent @Singleton @Component(modules= arrayOf(AppModule::class, NetModule::class)) interface […]

匕首2不能从子组件(kotlin)注入

我知道,一般来说,这是使用Kotlin不应该有所作为,但我遇到了奇怪的情况,其中@Named限定符需要Kotlin中的范围如此裸露在我身边。 我有一个ViewHolderFactory类,它允许我创建一个简单的视图types – >视图持有者类的映射: @Singleton class ViewHolderFactoryImpl @Inject constructor( private val viewHolderComponentProvider: Provider ): ViewHolderFactory(mapOf( R.layout.view_error to ErrorViewHolder::class.java, R.layout.view_soft_error to SoftErrorViewHolder::class.java, R.layout.view_empty to EmptyViewHolder::class.java, R.layout.view_loading to LoadingViewHolder::class.java, R.layout.item_got_it to GotItViewHolder::class.java)) { override fun createViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val viewHolder = super.createViewHolder(parent, viewType) if (viewHolder is Injectable) { viewHolderComponentProvider.get() .viewHolder(viewHolder) .build() .inject(viewHolder) } return […]

Kotlin Dagger2找不到符号ApplicationModule_ProvideApplicationFactory

我试图用Kotlin使用Dagger2,但今天试图编译得到这个错误: 错误:任务’:app:compileDebugJavaWithJavac’的执行失败。 错误:(5,43)错误:找不到符号类ApplicationModule_ProvideApplicationFactory (应用程序)Build.gradle apply plugin: ‘com.android.application’ apply plugin: ‘kotlin-android’ apply plugin: ‘kotlin-android-extensions’ android { compileSdkVersion 23 buildToolsVersion “23.0.3” defaultConfig { applicationId “com.ilyarb.geotags” minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName “1.0” } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } } sourceSets { main.java.srcDirs += ‘src/main/kotlin’ } dexOptions { javaMaxHeapSize “2048M” } } […]

用Kotlin创建自定义匕首2范围

我试图将Java代码转换为Kotlin来创建自定义匕首范围。 这里是Java代码: @Documented @Scope @Retention(RetentionPolicy.RUNTIME) public @interface CustomScope { } 一旦转换成kotlin这是结果 @Scope @Documented @Retention(RetentionPolicy.RUNTIME) annotation class CustomScope 我有一个与@Retention(RetentionPolicy.RUNTIME)types不匹配。我有以下错误信息:必需types是AnnotationRetention,但findRetentionPolicytypes。 @interface似乎已被替换。

Kotlin androidTest:测试运行完成。 空的测试套件

我正试图将我的测试从java转换为kotlin。 简单的unit testing翻译成功,如下所示: class BindingUtilsTest { @Test @Throws(Exception::class) fun testConvertBooleanToVisibility_visible() { assertEquals(BindingUtils.convertBooleanToVisibility(true), View.VISIBLE) } } 但是,当我试图运行androidTest失败,消息:“没有测试被发现”和 测试运行开始 测试运行完成。 空的测试套件。 代码工作完美,当在Java中。 相关代码: build.gradle部分: apply plugin: “com.android.application” apply plugin: “com.neenbedankt.android-apt” // for tests apply plugin: ‘kotlin-android’ // defaultConfig testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” sourceSets { test.java.srcDirs += ‘src/test/kotlin’ // tests are there androidTest.java.srcDirs += ‘src/androidTest/kotlin’ // and there } // […]