Tag: 匕首 2

Kotlin:将数组传递给可扩展运算符的可变参数方法

我花了太长时间试图研究如何将一些Migration实例传递给Dagger2模块的Room数据库生成器。 Room数据库生成器需要上下文和数据库名称。 Room.databaseBuilder(context, Database::class.java, dbName) .build() 迁移可以通过使用vararg migrations: Migration!的addMigrations方法添加到构建器中vararg migrations: Migration! 一种选择是创建构建器。 val builder = Room.databaseBuilder(context, Database::class.java, dbName) 然后通过迁移每个 migrations.forEach { builder.addMigrations(it) } 然而这是混乱和不必要的,应该使用扩展运算符。 我设法错过了这个,因为我发现的传播运算符的唯一文档是文档中的单个句子。 当我们调用可变参数函数的时候,我们可以逐个传递参数,比如asList(1,2,3),或者如果我们已经有一个数组并且想把它的内容传给函数,我们使用spread运算符(在数组前加*)

生成的类未找到

使用Dagger2和Kotlin,当其他调用代码存在时,我的组件类实现不会被生成。 当没有调用代码存在时,生成实现。 例如 val comp = DaggerMyComponent.create() 导致构建失败, DaggerMyComponent不会生成,因此无法找到 // val comp = DaggerMyComponent.create() DaggerMyComponent类是生​​成的,可以在磁盘上查看,构建成功。 我试过了Dagger 2.0.1,2.0.2,2.1-Snapshot,使用Kotlin beta-1103。 如果需要,我可以发布我的gradle文件,源代码或堆栈跟踪。 有没有人遇到过这个问题?

用匕首在Kotlin中注入Generic类型2

在模块中 @Provides @Named("test") fun provideTest(): Factory<Cat> { return createdFactory } 在活动中 @Inject @Named("test") lateinit var mFactory: Factory<Cat> 最后我得到一个错误 错误:(1,1)处理注释时发生了一些错误。 请看上面的错误信息。

匕首2与Kotlin,在ApplicationComponent中返回泛型类型

我想返回与泛型类型被子图公开,问题是在自动生成的Java类,我试图做一些事情,但解决它的一种方法是从AppComponent中删除泛型类型,并返回简单的对象。 有更多的“正确”的方法? 这是AppComponent @Singleton @Component(modules = arrayOf(ApplicationModule::class)) interface ApplicationComponent { fun inject(activity: BaseActivity<MvpView, MvpPresenter<MvpView>>) //… fun dataBase(): Database<Realm> } 这里是ApplicationModule中的函数 @Provides @Singleton fun provideDatabase(@AppContext context: App): Database<Realm> { Realm.init(context) val config = RealmConfiguration.Builder() .deleteRealmIfMigrationNeeded() .name("db") .build() Realm.setDefaultConfiguration(config) return RealmDatabase(Realm.getDefaultInstance()) } 然后我想收到我的数据库 @Provides @ActivityScope fun provideDich(database: Database<Realm>) = Someobject(database) 然后我看到日志说: **Error:com.test.data.storage.Database<? extends io.realm.Realm> cannot be provided […]

组件(unscoped)可能不引用作用域绑定

我最近开始用kotlin使用匕首-2。 不幸的是,我已经明白了sumbcomponants的一个问题,我很难理解为什么我得到这个gradle错误: …NetComponent (unscoped) may not reference scoped bindings: @dagger.Subcomponent(modules = {com.example.kremik.cryptodroid.di.module.NetModule.class}) @Singleton @Provides com.example.kremik.cryptodroid.data.remote.CMCService com.example.kremik.cryptodroid.di.module.NetModule.providesCMCService(retrofit2.Retrofit) @Singleton @Provides retrofit2.Retrofit com.example.kremik.cryptodroid.di.module.NetModule.providesRetrofit() @org.jetbrains.annotations.NotNull @Singleton @Provides com.example.kremik.cryptodroid.data.service.CurrencyDataPresenter com.example.kremik.cryptodroid.di.module.NetModule.providesCurrencyDataPresenter(com.example.kremik.cryptodroid.data.local.CurrenciesProvider, com.example.kremik.cryptodroid.ui.LivePrices.LivePricesPresenter) 模块:应用 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' android { compileSdkVersion 26 buildToolsVersion "26.0.1" defaultConfig { applicationId "com.example.kremik.cryptodroid" minSdkVersion 19 targetSdkVersion 26 versionCode 1 […]

匕首2 – 多模块应用程序错误

我在我的android kotlin应用程序中使用匕首2。 一切工作正常,直到我添加其他模块项目。 然后我看到这个错误: e: java.lang.IllegalStateException: failed to analyze: java.lang.IllegalArgumentException: expected one element but was: <android.support.v4.app.FragmentActivity, android.support.v4.app.TaskStackBuilder.SupportParentable> at org.jetbrains.kotlin.analyzer.AnalysisResult.throwIfError(AnalysisResult.kt:57) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules(KotlinToJVMBytecodeCompiler.kt:138) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:154) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:58) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:103) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:51) at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:92) at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$2.invoke(CompileServiceImpl.kt:386) at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$2.invoke(CompileServiceImpl.kt:96) at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:889) at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:96) at org.jetbrains.kotlin.daemon.common.DummyProfiler.withMeasure(PerfUtils.kt:137) at org.jetbrains.kotlin.daemon.CompileServiceImpl.checkedCompile(CompileServiceImpl.kt:916) at org.jetbrains.kotlin.daemon.CompileServiceImpl.doCompile(CompileServiceImpl.kt:888) at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:385) at sun.reflect.GeneratedMethodAccessor89.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at […]

Kotlin:Dagger2 @Inject context var始终为空

我正在尝试在AndroidStudio中与Android没有连接的模块,它没有任何活动,但我需要上下文像房间数据库的几件事情。 这是我的设置: AppComponent @Singleton @Component(modules = arrayOf(AndroidSupportInjectionModule::class, AppModule::class)) interface AppComponent : AndroidInjector<NexoApplication> { @Component.Builder interface Builder { @BindsInstance fun application(application: NexoApplication): Builder fun build(): AppComponent } override fun inject(app: NexoApplication) } 的AppModule @Module class AppModule { @Singleton @Provides fun provideLogger(application: NexoApplication) = LogNexoManager(application) } AppLifecycleCallbacks interface AppLifecycleCallbacks { fun onCreate(application: Application) fun onTerminate(application: Application) } […]

错误:执行失败的任务':app:kaptDebugKotlin'

我是使用Kotlin并尝试用Dagger2设置它的新手,我已经看到了一些例子,但是它们都不适合我。 我一直得到这个 错误:执行任务':app:kaptDebugKotlin'失败。 内部编译器错误。 查看日志了解更多详情 我有我的build.gradle(模块:应用程序) apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 25 buildToolsVersion "25.0.0" defaultConfig { applicationId "com.exampleapp" minSdkVersion 14 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } kapt { generateStubs = true […]

Dagger 2不会生成组件类(Android,Kotlin)

基本上,我想测试TheCoffee被自动“注入”。 但是我找不到DaggerMyComponent 。 我想我一定做错了什么,但是什么? 在MainActivity下, @Component(modules=arrayOf(MyModule::class)) @Singleton interface MyComponent { fun inject(coffee: CoffeeShop) } @Module class MyModule { @Provides @Singleton @ForApplication fun provideCoffee():Coffee { return Coffee("Bad coffee"); } } data class Coffee(var Name:String) class CoffeeShop { @Inject var TheCoffee:Coffee? = null; } @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class ForApplication 的build.gradle apply plugin: 'kotlin-kapt' … kapt { generateStubs […]

kapt构建失败与匕首Android处理器

我试图用Kotlin注解处理工具 (kapt)在我的项目中包含Dagger Android处理器( 在此记录)。 我已经在我的build.gradle文件中包含了适当的依赖关系: apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "com.example.app" minSdkVersion 16 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } sourceSets { main.java.srcDirs += 'src/main/kotlin' } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { […]