Tag: 匕首 2

如何在Kotlin中注入var?

我尝试将Dagger2实现到我的Kotlin项目中,但是@Inject注释存在问题。 在Java中看起来像这样,这工作正常: public class FooActivity extends Activity { @Inject @Named("accessTokenObservable") public Flowable<Optional<AccessToken>> accessTokenObservable; @Override protected void onCreate(@Nullable final Bundle savedInstanceState) { super.onCreate(savedInstanceState); App.getGraph().inject(this); } } 但是,我如何写Kotlin中的@Inject ? 当我使用这个: @Inject @Named("accessTokenObservable") var accessTokenObservable: Flowable<Optional<AccessToken>>? = null 我得到这个错误消息: Error:Dagger does not support injection into private fields 如果我使用lateinit : @Inject @Named("accessTokenObservable") lateinit var accessTokenObservable: Flowable<Optional<AccessToken>> 我得到这个错误消息: Error:Flowable<Optional<AccessToken>> cannot […]

匕首2静态提供者方法在kotlin

随着最近版本的匕首2所做的改进之一是具有静态提供方法的可能性。 简单如此: @Provides static A providesA() { return A(); } 我想知道在kotlin中如何去做这件事? 我试过了 @Module class AModule { companion object { @JvmStatic @Provides fun providesA(): A = A() } } 但是我收到错误消息: @Provides methods can only be present within a @Module or @ProducerModule 我猜这里的伴侣对象正在发生什么事情,但是我对Kotlin来说是一个很新的东西,我不确定如何做到这一点。 这甚至有可能吗? 谢谢!

Dagger2 + Kotlin,注射不起作用

不幸的是,Dagger2没有创建要注入的对象的实例。 匕首:2.0.2 Kotlin:1.0.1-2 源代码? 这里 零件: @ActivityScope @Component(dependencies = ApplicationComponent.class, modules = { HomeModule.class }) public interface HomeComponent { void inject(HomeActivity homeActivity); HomePresenter homePresenter(); } 模块: @Module public class HomeModule { @Provides @ActivityScope HomePresenter provideHomePresenter( HomePresenterImpl presenter) { return presenter; } }

匕首2在Kotlin未解决的参考

我正在尝试在我的Android项目中使用Dagger 2,我在Kotlin中编写代码。 我从Dagger 2回购Android的简单的例子。 我已经设法在Android Studio中使用来自dagger-android-gradle-sample的示例正确配置项目,它包含正确配置的gradle文件。 现在我开始将java类更改为kotlin。 这是自动转换的DemoApplication.java在kotlin中的样子: public class DemoApplication : Application() { Singleton Component(modules = array(javaClass<AndroidModule>())) trait ApplicationComponent { public fun inject(application: DemoApplication) public fun inject(homeActivity: HomeActivity) public fun inject(demoActivity: DemoActivity) } public var component: ApplicationComponent? = null override fun onCreate() { super.onCreate() component = `Dagger_DemoApplication$ApplicationComponent`.builder().androidModule(AndroidModule(this)).build() component!!.inject(this) } } 匕首生成的类在Kotlin中可见,但它抱怨($)类名称中使用的符号。 ($)在Kotlin有特殊的目的,所以我想这就是为什么。 你可以注意到auto-convertion用(`)符号封装类名,所以编辑器不会抱怨它。 不幸的是,编译器失败: […]

Android Kotlin:错误未解决的参考:DaggerAppComponent

我今天已经把Kotlin插件安装到一个现有的Dagger 2项目中。在Kotlin安装之前,我对Dagger没有任何问题。 但是,现在编译器抱怨: Error:(5, 32) Unresolved reference: DaggerAppComponent Error:Execution failed for task ':app:compileDebugKotlinAfterJava'. > Compilation error. See log for more details Error:(12, 21) Unresolved reference: DaggerAppComponent 项目gradle: ext.kotlin_version = '1.1.1' repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" 模块gradle: kapt { generateStubs = true } dependencies { compile fileTree(dir: 'libs', include: […]

Android库,Kotlin和Dagger2

我正在构建一个包含两个模块的应用程序:核心模块,即Android库(com.android.library)和应用程序模块(com.android.application)。 将Java文件转换为Kotlin后,该项目不编译,给我一个错误,没有找到生成的Dagger 2文件(未解决的参考)。 但是那些目前正在生成的文件是: …核心\编译\生成的\源\ kapt \ {释放我的\核心\命名空间} \ DaggerBaseComponent.java 我错过了什么? build.gradle(核心模块) apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-android-extensions' … android { … sourceSets { main.java.srcDirs += 'src/main/kotlin' } } dependencies { … // Dagger. kapt "com.google.dagger:dagger-compiler:2.10" compile 'com.google.dagger:dagger:2.10' provided 'javax.annotation:jsr250-api:1.0' // Kotlin compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" } build.gradle(应用程序模块) apply plugin: 'com.android.application' […]

Retrofit2和kotlin

我试图把Kotlin RxJava和retrofit2结合起来。 @GET("/xxxxxxxxxxxx/{id}.json") fun getHotel(@Part("id") id : String) : Observable<Response<Hotel>> 当我尝试调用这个方法(getHotels())时: var subscription = HotelsFactory.getHotelService((activity.applicationContext as App) .client) .getHotel(arguments.getInt("id").toString()) .subscribeOn(Schedulers.computation()) .observeOn(AndroidSchedulers.mainThread()) .subscribe({response -> showHotels(response)}) {throwable -> throwable.printStackTrace()} mSubscription.add(subscription) 我拿这个: @部分参数只能用于多部分编码。

Kotlin + Dagger 2:Dagger *文件不会生成

我第一次开始使用Kotlin和Dagger 2。 我认为所有东西都和Java一样,但显然不是。 匕首不会为我生成Dagger *文件。 这是我的代码: 组件: @PerActivity @Subcomponent(modules = arrayOf(ApplicationModule::class)) interface ActivityComponent { fun inject(app: OneAccountApplication) } @Singleton @Component(modules = arrayOf(ApplicationModule::class)) interface ApplicationComponent { fun inject(syncService: SyncService) @ApplicationContext fun context(): Context fun application(): Application fun ribotsService(): OneAccountService fun preferencesHelper(): PreferencesHelper fun databaseHelper(): DatabaseHelper fun dataManager(): DataManager } @ConfigPersistent @Component(dependencies = arrayOf(ApplicationComponent::class)) interface ConfigPersistentComponent { […]

Kotlin Kapt:java.lang.IllegalStateException:endPosTable已经设置

试图使用Kotlin maven插件来构建一个kotlin应用程序。 使用Dagger 2依赖注入框架。 调用时出现以下错误 mvn clean compile package 也可以通过调用来复制 mvn clean package 然后打电话 mvn package 在maven 3和java 8中似乎有一个错误,但是我找不到kotlin maven插件的解决方法。 [ERROR] Failed to execute goal org.jetbrains.kotlin:kotlin-maven-plugin:1.1.3-2:kapt (kapt) on project process: Compilation failure [ERROR] java.lang.IllegalStateException: failed to analyze: java.lang.IllegalStateException: endPosTable already set [ERROR] at org.jetbrains.kotlin.analyzer.AnalysisResult.throwIfError(AnalysisResult.kt:57) [ERROR] at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyzeAndGenerate(KotlinToJVMBytecodeCompiler.kt:344) [ERROR] at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileBunchOfSources(KotlinToJVMBytecodeCompiler.kt:226) [ERROR] at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:200) [ERROR] at […]

Kotlin和Dagger2

我正在尝试将Kotlin加入到我的项目中,但是在启用Kotlin之后,我无法再创建Dagger2类。 我尝试了第二个项目,我有同样的问题(它实际上更糟糕,它抱怨Dagger2和DataBinding)。 这些是我为了启用Kotlin所做的改变: 项目build.gradle: diff –git a/build.gradle b/build.gradle index 486700c..91e4cda 100644 — a/build.gradle +++ b/build.gradle @@ -1,13 +1,15 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { + ext.kotlin_version = '1.0.5-3' repositories { jcenter() } dependencies { – classpath 'com.android.tools.build:gradle:2.3.0-alpha2' + classpath 'com.android.tools.build:gradle:2.3.0-beta1' classpath 'com.google.gms:google-services:3.0.0' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' […]