Articles of dagger 2

Kotlin错误:Dagger不支持注入私人领域

我在kotlin活动中使用ViewPager,我想在Kotlin Fragment中使用匕首注射。 我有错误:Dagger不支持注入私有字段。 在Java Fragment中匕首注射工作。 为什么我不能在kotlin faragment中注入匕首? 在我的kotlin活动中 mPagerAdapter = object : FragmentPagerAdapter(supportFragmentManager) { private val mFragments = arrayOf(KotlinFragment(), JavaFragment()) private val mFragmentNames = arrayOf(getString(R.string.cashdocuments), getString(R.string.action_absmysql)) override fun getItem(position: Int): Fragment { return mFragments[position] } override fun getCount(): Int { return mFragments.size } override fun getPageTitle(position: Int): CharSequence { return mFragmentNames[position] } } 我的kotlin片段 class […]

Retrofit API调用收到“HTTP FAILED:java.io.IOException:Cancelled”

无法弄清楚为什么会这样。 我的调用不会触发任何一个rx回调(onCompleted(),onError(),onNext())。 我收到的唯一的东西是这个okhttp输出: D/OkHttp: –> GET https://api.privatbank.ua/p24api/exchange_rates?json=true&date=20.11.2016 http/1.1 D/OkHttp: –> END GET D/OkHttp: <– HTTP FAILED: java.io.IOException: Canceled 改造模块: @Module public class RestModule { @Provides @Singleton public HttpLoggingInterceptor providesHttpLogginInterceptor() { return new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY); } @Provides @Singleton public OkHttpClient providesOkHttpClient(@NonNull HttpLoggingInterceptor loggingInterceptor) { return new OkHttpClient.Builder() .addInterceptor(loggingInterceptor) .connectTimeout(ConstantsManager.CONNECTION_TIME_OUT, TimeUnit.SECONDS) .readTimeout(ConstantsManager.READ_TIME_OUT, TimeUnit.SECONDS) .build(); } @Provides @Singleton public […]

代理的目的提供Dagger 2生成的代码

我有这个Dagger模块。 我想了解生成的代码,以便validation我的Dagger配置是否最佳。 @Module public class TypefaceModule { @Provides @Singleton @Named(“Roboto Light”) static Typeface provideRobotoLight(AssetManager assets) { return Typeface.createFromAsset(assets, “fonts/Roboto-Light.ttf”); } } 这是生成的代码(Dagger 2.14.1): public final class TypefaceModule_ProvideRobotoLightFactory implements Factory { private final Provider assetsProvider; public TypefaceModule_ProvideRobotoLightFactory(Provider assetsProvider) { this.assetsProvider = assetsProvider; } @Override public Typeface get() { return Preconditions.checkNotNull( TypefaceModule.provideRobotoLight(assetsProvider.get()), “Cannot return null from a […]

具有命名参数的kotlin中的Dagger 2构造函数注入

我有这种依赖: @Singleton class SpiceMix @Inject constructor(@field:[Named(“oregano”)] private val oregano: Spice, @field:[Named(“sage”)] private val sage: Spice, @field:[Named(“rosemary”)] private val rosemary: Spice) 以及一个实现其依赖关系的模块: @Module class SpiceModule { @Provides @Named(“oregano”) @Singleton fun provideOregano(): Spice = Oregano() @Provides @Named(“sage”) @Singleton fun provideSage(): Spice = Sage() @Provides @Named(“rosemary”) @Singleton fun provideRosemary(): Spice = Rosemary() 然后将SpiceMix注入我的应用程序的不同位置。 但是,这不编译,我收到一个错误: Spice cannot be provided […]

Dagger 2 Build IllegalArgumentException compileDebugJavaWithJavac

我一直在测试Dagger 2,一切都在工作,直到我做了一些重构。 现在gradle抛出一个IllegalArgumentException ,我无法弄清楚我改变了什么现在导致错误。 我没有对gradle文件进行任何更改,这似乎是堆栈跟踪的主要内容: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ‘:mobile:compileDebugJavaWithJavac’. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69) … Caused by: java.lang.IllegalArgumentException at com.google.common.base.Preconditions.checkArgument(Preconditions.java:108) at dagger.internal.codegen.writer.ClassName.peerNamed(ClassName.java:130) at dagger.internal.codegen.SourceFiles.membersInjectorNameForMembersInjectionBinding(SourceFiles.java:266) at dagger.internal.codegen.InjectBindingRegistry.registerBinding(InjectBindingRegistry.java:194) at dagger.internal.codegen.InjectBindingRegistry.registerBinding(InjectBindingRegistry.java:171) at dagger.internal.codegen.InjectProcessingStep.process(InjectProcessingStep.java:129) at dagger.shaded.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:228) at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794) at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705) at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91) at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035) at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176) at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170) at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856) at com.sun.tools.javac.main.Main.compile(Main.java:523) … 89 more Dagger也没有生成任何文件,而且之前也是如此。 我一直在尝试解决这个问题的方法,我可以find,主要涉及修复gradle文件或清除build文件夹,但到目前为止还没有任何工作。 快速更新(因为我注意到一些上升票); 我从未弄清楚我做错了什么,最后我恢复了旧版本。 恢复之后,我再次进行了重构,并且工作正常。 […]

如何从测试覆盖范围中排除Dagger2类

是否有任何选项可以从Android Studio中的测试覆盖率报告中排除Dagger2类

创建Singleton w / Dagger 2的最简单方法是什么?

我是否需要设置模块,提供程序和接口(组件)? 为了能够注入单例,似乎相当多的开销。 有人可以使用Dagger 2提供一个简单的单例示例吗? (还显示了如何设置单例的属性,如上下文,因此每次使用单例时都不需要传递它)

可以用静态方法完成匕首注射吗?

我有这个网络模块。 我想在ErrorUtils的静态方法中注入网络模块。 @Module public class NetworkModule { private final String END_POINT = “https://www.myurl.com/”; @Provides @Singleton public OkHttpClient getOkHttpClient() { OkHttpClient okHttpClient = builder.build(); return okHttpClient; } @Provides @Singleton public GsonConverterFactory getGsonConverterFactory() { return GsonConverterFactory.create(); } @Provides @Singleton public Retrofit getRetrofit(OkHttpClient okHttpClient, GsonConverterFactory gsonConverterFactory) { return new Retrofit.Builder() .baseUrl(END_POINT) .client(okHttpClient) .addConverterFactory(gsonConverterFactory) .build(); } @Provides @Singleton public […]

Dagger 2组件依赖项

可以在模块中注入一些东西吗? 我有2个基本模块/组件: @Component(modules = {OkHttpModule.class}) public interface OkHttpComponent extends AppComponent { OkHttpClient provideOkHttpClient(); } @Module public class OkHttpModule { @Provides OkHttpClient provideOkHttpClient() { return mHttpClient; } } @Component(modules = {GsonModule.class}) public interface GsonComponent extends AppComponent { Gson provideGson(); } @Module public class GsonModule { @Provides Gson provideGson() { return mGson; } } 有了这个模块/组件,我想创建第3个模块: @Component(dependencies = […]

Dagger + Retrofit。 在运行时添加auth头

我想知道Dagger是否有办法知道它应该在新数据可用时重新创建一个对象。 我所说的实例是我用于改造的请求标题。 在某些时候(当用户登录时),我得到一个令牌,我需要将其添加到改造的标题中以进行经过身份validation的请求。 问题是,我留下了相同的未经validation的改造版本。 这是我的注射码: @Provides @Singleton OkHttpClient provideOkHttpClient(Cache cache) { HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(interceptor) .cache(cache).build(); client .newBuilder() .addInterceptor( chain -> { Request original = chain.request(); Request.Builder requestBuilder = original.newBuilder() .addHeader(“Accept”, “Application/JSON”); Request request = requestBuilder.build(); return chain.proceed(request); }).build(); return client; } @Provides @Singleton Retrofit provideRetrofit(Gson gson, […]