我试图在我的Android代码中创建一个Lint规则,检查构造函数中是否注入数字,所以如果我为视图模型超过了某个数字,例如,我将引发一个lint警告。 我知道我必须在我的Lint探测器中实施一个UastScanner,但是我迷路了,因为我找不到好的文档。 还有别人做过这样的事吗? 或者我可以在哪里find好的文档? 谢谢!
我收到以下错误: 错误:(8,1)错误:无法使用@Inject构造函数或@Proxy或@ Produces注释方法提供java.lang.String。 我被困在试图提供两个合格的字符串的模块。 这是匕首的简化设置。 @Singleton @Component(modules = [GreetingsModule::class]) interface AppComponent { fun inject(activity: MainActivity) } @Qualifier annotation class Spanish @Qualifier annotation class French @Qualifier annotation class English @Module @Singleton class GreetingsModule { @Provides @Spanish fun providesHola(): String = “Hola mundo! – From Dagger” @Provides @English fun providesHello(): String = “Hello world! – From Dagger” […]
当我尝试使用Kotlin和Dagger 2时,我有这个问题。 “接口不能提供@提供或@产生注释的方法”。 这是我的Module类: @Module class MenuActivityModule(@NonNull private val menuActivity: MenuActivity) { @Provides @MenuActivityScope fun provideGameScreenDimensions(application: Application) = GameScreenDimension(application.resources) @Provides @MenuActivityScope fun provideAudio() = AndroidAudio(menuActivity) @Provides @MenuActivityScope fun providePowerManager() = menuActivity.getSystemService(Context.POWER_SERVICE) as PowerManager @Provides @MenuActivityScope fun provideWakeLock(@NonNull powerManager: PowerManager) = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Preferences.APPLICATION_TAG) } This is a part of my Activity class, where I inject some […]
我正在用Kotlin Dagger 2和@Named注解( Java使用相同的代码正常工作) Error:[dagger.android.AndroidInjector.inject(T)] @javax.inject.Named(“LOGGING_INTERCEPTOR”) okhttp3.Interceptor cannot be provided without an @Provides-annotated method. 这是我的API模块代码的一部分: @Provides @Named(LOGGING_INTERCEPTOR) fun provideLoggingInterceptor() = HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BODY } @Provides @Named(CONNECTIVITY_INTERCEPTOR) fun provideConnectivityInterceptor(): Interceptor = ConnectivityInterceptor() @Singleton @Provides fun provideOkHttpClient( @Named(CONNECTIVITY_INTERCEPTOR) connectivityInterceptor: Interceptor, @Named(LOGGING_INTERCEPTOR) loggingInterceptor: Interceptor ): OkHttpClient = OkHttpClient.Builder() .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS) .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS) .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS) .addInterceptor(connectivityInterceptor) .apply […]
使用Dagger2和Kotlin,当其他调用代码存在时,我的组件类实现不会被生成。 当没有调用代码存在时,生成实现。 例如 val comp = DaggerMyComponent.create() 导致构建失败, DaggerMyComponent不会生成,因此无法find // val comp = DaggerMyComponent.create() DaggerMyComponent类是生成的,可以在磁盘上查看,构建成功。 我试过了Dagger 2.0.1,2.0.2,2.1-Snapshot,使用Kotlin beta-1103。 如果需要,我可以发布我的gradle文件,源代码或堆栈跟踪。 有没有人遇到过这个问题?
我已经花了几个小时尝试在谷歌find我的两个匕首实施的区别是什么。 它是这样实现的 @Module class MatchesModule { @Provides @NetworkScope @IntoMap @RetrofitModulesName(eRetrofitModules.MATCHES) fun retrofitMatches(okHttpClient: OkHttpClient, rxAdaptor: RxJava2CallAdapterFactory, iBuilder: Retrofit.Builder): Retrofit = iBuilder.addConverterFactory(GsonConverterFactory.create(mDeserializerMatches)); } 此方法提供Retrofit对象,我也使用注释@IntoMap和@RetrofitModulesName(…)为了把所有这些Retrofit对象映射。 @Module class PreviewModule { @Provides @PreviewScope fun provideMatchesPresenter(retrofitModules: Map): IMatchPresenter = MatchPresenter(retrofitModules) } 我得到所有Retrofit对象,并将它们传递给MathcPresenter一切都很好。 但是我想在我的演示Map<Foo, Provider>获得Map<Foo, Provider> 。 所以,我添加了这个词Provider的论点 @Provides @PreviewScope fun provideMatchesPresenter(retrofitModules: Map<eRetrofitModules, Provider>): IMatchPresenter = MatchPresenter(retrofitModules) 以及MathcPresenter的构造MathcPresenter class MatchPresenter(retrofitModules: Map<eRetrofitModules, Provider>): […]
Dagger2不会创建类Dagger *。 我创建了MyContainerComponent接口,但是不创建类DaggerMyContainerComponent! buildscript { repositories { jcenter() mavenCentral() } dependencies { classpath ‘com.android.tools.build:gradle:2.2.3’ classpath “com.android.databinding:dataBinder:1.0-rc4” classpath ‘com.neenbedankt.gradle.plugins:android-apt:1.8’ classpath ‘com.frogermcs.androiddevmetrics:androiddevmetrics-plugin:0.4’ classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.6” } } allprojects { repositories { jcenter() mavenCentral() } } task clean(type: Delete) { delete rootProject.buildDir } 在build.gradle apply plugin: ‘com.android.application’ apply plugin: ‘android-apt’ apply plugin: ‘com.android.databinding’ apply plugin: ‘kotlin-android’ apply plugin: ‘com.frogermcs.androiddevmetrics’ […]
我有一些奇怪的kotlin与Dagger的一般问题,我有点固定,但解决方案是不健全的。 这里是匕首类: @Module class P5Module { @Provides fun pool(): RecyclerView.RecycledViewPool = RecyclerView.RecycledViewPool() @Provides fun adapters(fusion: P5FusionAdapter, personas: P5ListAdapter, skills: P5SkillsAdapter, info: InfoAdapter) : List = listOf(fusion, personas, skills, info) } @ActivityScope @Subcomponent(modules = arrayOf(P5Module::class)) interface P5Component { fun adapter(): PageableAdapter } interface Pageable { fun manager(ctx: Context): LayoutManager fun attach() fun adapter(): Adapter } class […]
(使用kotlin)我有一个应用程序使用2个片段的设置活动。 我希望两者都能像Activity一样获得SettingsViewModel的同一个实例。 我认为有一个范围问题,我错过了。 首先,我有标准的ViewModelModule : @Module abstract class ViewModelModule { @Binds @IntoMap @ViewModelKey(SettingsViewModel::class) abstract fun bindSettingsViewModel(viewModel: SettingsViewModel): ViewModel @Binds abstract fun bindViewModelFactory(factory: MyViewModelFactory): ViewModelProvider.Factory } 我把我的活动绑定在: @Module abstract class AndroidBindingModule { @PerActivity @ContributesAndroidInjector(modules = [SettingsActivityModule::class]) abstract fun contributeSettingsActivity(): SettingsActivity } 随着所有其他的东西,这工作得很好, SettingsActivity也得到了一个SettingsActivity的实例。 SettingsActivityModule添加以下内容: @PerFragment @ContributesAndroidInjector abstract fun contributeMainSettingsFragment(): MainSettingsFragment @PerFragment @ContributesAndroidInjector abstract fun contributeDebugSettingsFragment(): DebugSettingsFragment […]
使用Dagger向类中注入依赖关系的最好方法是什么,特别是像Dagger这样的零参数构造函数类,比如Activities? 匕首2可能会改善情况吗? 提前致谢。