小编eur*_*com的帖子

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

我在kotlin活动中使用ViewPager,我希望在Kotlin Fragment中使用匕首注射.我有错误:Dagger不支持注入私有字段.在Java Fragment中匕首注射工作.为什么我不能在kotlin片段中注入匕首?

在我的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]
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的kotlin片段

class KotlinFragment : Fragment()  {


@Inject
internal var mSharedPreferences: SharedPreferences? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    (activity.application as SamfantozziApp).dgaeacomponent().inject(this)

}

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
                          savedInstanceState: Bundle?): …
Run Code Online (Sandbox Code Playgroud)

android dependency-injection kotlin dagger dagger-2

35
推荐指数
7
解决办法
1万
查看次数

Dagger2在依赖模块中注入@Named @Provides?

我使用https://guides.codepath.com/android/Dependency-Injection-with-Dagger-2的 dagger2演示.我想使用缓存和非缓存的改进调用.我在NetModule.java中创建

@Provides @Named("cached")
@Singleton
OkHttpClient provideOkHttpClient(Cache cache) {
    OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .cache(cache)
            .build();
    return okHttpClient;
}

@Provides @Named("non_cached")
@Singleton
OkHttpClient provideOkHttpClientNonCached() {
    OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .build();
    return okHttpClient;
}
Run Code Online (Sandbox Code Playgroud)

GitHubModule.java依赖于NetModule.java.我的GitHubComponent.java

@UserScope
@Component(dependencies = NetComponent.class, modules = GitHubModule.class)
public interface GitHubComponent {
void inject(DemoDaggerActivity activity);
}
Run Code Online (Sandbox Code Playgroud)

我的NetComponent.java

@Singleton
@Component(modules={ApplicationModule.class, NetModule.class})
public interface NetComponent {
// downstream components need these exposed
Retrofit retrofit();
OkHttpClient okHttpClient();
SharedPreferences sharedPreferences();
}
Run Code Online (Sandbox Code Playgroud)

在我的DemoDaggerActivity.java注入改造中:

@Inject @Named("cached")
OkHttpClient mOkHttpClient;

@Inject …
Run Code Online (Sandbox Code Playgroud)

java android dependency-injection dagger dagger-2

4
推荐指数
1
解决办法
4615
查看次数

Android Dagger2 2.11 unscoped Appcomponent引用范围绑定

我使用https://medium.com/@iammert/new-android-injector-with-dagger-2-part-1-8baa60152abe的 dagger2演示.我已将SharedPreferences添加到AppModule.java中

@Module(subcomponents = {
    MainActivityComponent.class,
    DetailActivityComponent.class,
    Detail2ActivityComponent.class})
public class AppModule {

@Provides
@Singleton
Context provideContext(Application application) {
    return application;
    }

@Provides
@Singleton //if i remove dagger works right
SharedPreferences providesSharedPreferences(Application application) {
    return PreferenceManager.getDefaultSharedPreferences(application);
    }

}
Run Code Online (Sandbox Code Playgroud)

我在MainActivity中注入SharedPreferences.重建项目后,我收到错误

在此输入图像描述 如果我通过provideSharedPreferences删除注释@Singleton,则项目重建正确.为什么问题@Singleton注释由provideSharedPreferences?

java android dagger-2

2
推荐指数
1
解决办法
1210
查看次数

MultiDexApplication不实现HasActivityInjector

我使用New Android Injector和Dagger 2通过https://medium.com/@iammert/new-android-injector-with-dagger-2-part-1-8baa60152abe

在MultiDex支持之前,App已经发挥作用.我已经为app/build.gradle和AndroidManifest.xml添加了multidex支持.在MultiDex支持之后,我通过安装在设备上获得了错误logcat

致命异常:主java.lang.RuntimeException:无法启动活动ComponentInfo {com.eusecom.samfantozzi/com.eusecom.samfantozzi.Detail2Activity}:java.lang.RuntimeException:android.support.multidex.MultiDexApplication未实现dagger.android .AasActivityInjector在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295)的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)在android.app.ActivityThread.access $ 700(ActivityThread.java:159)在android .app.ActivityThread $ H.handleMessage(ActivityThread.java:1316)位于android.app的android.os.Handler.dispatchMessage(Handler.java:99)android.os.Looper.loop(Looper.java:137). ActivityThread.main(ActivityThread.java:5419)位于java.lang.reflect.Method.invokeNative(Native Method),位于com.android.internal.os的java.lang.reflect.Method.invoke(Method.java:525).在dalvik的com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)的ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1187).system.NativeStart.main(Native Method)引起:java.lang.RuntimeException:android.support.multidex.MultiDexApplication没有在dagger.android.AndroidInjection.inject(AndroidInjection.java:48)中实现dagger.android.HasActivityInjector com.usecom.samfantozzi.Detail2Activity.onCreate(Detail2Activity.java:19)在android.app.Isttrumentation.callActivityOnCreate(Instrumentation.java:1104)的android.app.Activity.performCreate(Activity.java:5372)android.app Android.app.ActivityThread $ H的android.app.ActivityThread.access $ 700(ActivityThread.java:159)android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)的.ActivityThread.performLaunchActivity(ActivityThread.java:2257) .handleMessage(ActivityThread.java:1316)在android.app.Handler.dispatchMessage(Handler.java:99)android.app.Looper.loop(Looper.java:137)android.app.ActivityThread.main(ActivityThread. java:5419)在java.lang.reflect.Method.invo的java.lang.reflect.Method.invokeNative(Native Method)ke(Method.java:525)位于dalvik的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1187)com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) .system.NativeStart.main(Native方法) 

我的App.java

public class SamfantozziApp extends MultiDexApplication implements HasActivityInjector {

@Inject
DispatchingAndroidInjector<Activity> activityDispatchingAndroidInjector;

public RxBus _rxBus;

@NonNull
private DatabaseReference mDatabaseReference;

@Override
public void onCreate() {
    super.onCreate();

    if (LeakCanary.isInAnalyzerProcess(this)) {
        // This process is dedicated to LeakCanary for heap analysis.
        // You should not init your app in this process.
        return; …
Run Code Online (Sandbox Code Playgroud)

java android dagger-2

2
推荐指数
1
解决办法
2278
查看次数

标签 统计

android ×4

dagger-2 ×4

java ×3

dagger ×2

dependency-injection ×2

kotlin ×1