Android错误:找不到符号类DaggerAppComponent [英] Android error: cannot find symbol class DaggerAppComponent

查看:1178
本文介绍了Android错误:找不到符号类DaggerAppComponent的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的同事根据存储库开发了一个应用程序,我应该做一些更改

My colleague developed an Application according to this repository and I should make some changes

在我的情况下,经过一些更改并删除了 Google Room 库,我遇到了这个问题:

In my case After some changes and remove Google Room Library I faced this problem:

错误:找不到符号类DaggerApplicationComponent

经过几次重建后仍无法生成Project

After several rebuilds still cannot generate Project

dagger2Version ='2.20'

implementation "com.google.dagger:dagger:$rootProject.dagger2Version"
annotationProcessor "com.google.dagger:dagger-compiler:$rootProject.dagger2Version"
implementation "com.google.dagger:dagger-android:$rootProject.dagger2Version"
implementation "com.google.dagger:dagger-android-support:$rootProject.dagger2Version"
annotationProcessor "com.google.dagger:dagger-android-processor:$rootProject.dagger2Version"

应用程序类

import javax.inject.Inject;

import dagger.android.DispatchingAndroidInjector;
import dagger.android.HasActivityInjector;
import uk.co.chrisjenx.calligraphy.CalligraphyConfig;

public class MvvmApp extends Application implements HasActivityInjector {

    @Inject
    DispatchingAndroidInjector<Activity> activityDispatchingAndroidInjector;

    @Inject
    CalligraphyConfig mCalligraphyConfig;

    @Override
    public DispatchingAndroidInjector<Activity> activityInjector() {
        return activityDispatchingAndroidInjector;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        DaggerAppComponent.builder()
                .application(this)
                .build()
                .inject(this);
        BluetoothCollector.getInstance(this);
        AppLogger.init();

        AndroidNetworking.initialize(getApplicationContext());
        CalligraphyConfig.initDefault(mCalligraphyConfig);
    }


    @Override
    public void onTerminate() {
        BluetoothCollector.getInstance(this).disconnect();
        super.onTerminate();
    }
}

AppComponent接口

import javax.inject.Singleton;

import dagger.BindsInstance;
import dagger.Component;
import dagger.android.AndroidInjectionModule;

@Singleton
@Component(modules = {AndroidSupportInjectionModule.class, AppModule.class, ActivityBuilder.class})
public interface AppComponent {

    void inject(MvvmApp app);

    @Component.Builder
    interface Builder {

        @BindsInstance
        Builder application(Application application);

        AppComponent build();
    }
}

ActivityBuilder类
进口匕首。模块;
import dagger.android.ContributesAndroidInjector;

ActivityBuilder Class import dagger.Module; import dagger.android.ContributesAndroidInjector;

@Module
public abstract class ActivityBuilder {

    @ContributesAndroidInjector(modules = {
            FeedActivityModule.class,
            BlogFragmentProvider.class,
            OpenSourceFragmentProvider.class})
    abstract FeedActivity bindFeedActivity();

    @ContributesAndroidInjector(modules = LoginActivityModule.class)
    abstract LoginActivity bindLoginActivity();

    // ...

    @ContributesAndroidInjector(modules = SettingsActivityModule.class)
    abstract SettingsActivity bindPageSixActivity();

    @ContributesAndroidInjector(modules = ChoosingModeActivityModule.class)
    abstract ChoosingModeActivity bindChoosingModeActivity();

}

错误日志:


错误:如果没有@Provides注释的方法,则无法提供[Dagger / MissingBinding] com.packagename.data.DataManager。

error: [Dagger/MissingBinding] com.packagename.data.DataManager cannot be provided without an @Provides-annotated method.

com.packagename.data.DataManager注入

com.packagename.data.DataManager is injected at

com.packagename.ui.feed.FeedActivityModule.provideFeedViewModel(dataManager,…)

com.packagename.ui.feed.FeedActivityModule.provideFeedViewModel(dataManager, …)

com.packagename.ui.feed.FeedViewModel注入

com.packagename.ui.feed.FeedViewModel is injected at

com.packagename.ui.feed.FeedActivity.mFeedViewModel

com.packagename.ui.feed.FeedActivity.mFeedViewModel

com.packagename.ui.feed.FeedActivity注入

com.packagename.ui.feed.FeedActivity is injected at

dagger.android.AndroidInjector.inject(T)[ com.packagename.di.component.AppComponent? com.packagename.di.builder.ActivityBuilder_BindFeedActivity.FeedActivitySubcomponent]

dagger.android.AndroidInjector.inject(T) [com.packagename.di.component.AppComponent ? com.packagename.di.builder.ActivityBuilder_BindFeedActivity.FeedActivitySubcomponent]

FeedActivityModule

import dagger.Module;
import dagger.Provides;

@Module
public class FeedActivityModule {

    @Provides
    FeedPagerAdapter provideFeedPagerAdapter(FeedActivity activity) {
        return new FeedPagerAdapter(activity.getSupportFragmentManager());
    }

    @Provides
    FeedViewModel provideFeedViewModel(DataManager dataManager, SchedulerProvider schedulerProvider) {
        return new FeedViewModel(dataManager, schedulerProvider);
    }
}

FeedViewModel

public class FeedViewModel extends BaseViewModel/*<FeedNavigator>*/ {

    public FeedViewModel(DataManager dataManager, SchedulerProvider schedulerProvider) {
        super(dataManager, schedulerProvider);
    }
}


推荐答案

问题是您已经注入了DataManager类,因此您需要通过构造函数注入来注入DataManager,或者必须在AppComponent中为其提供@Provides批注,并且当活动扩展时,应该使用AndroidSupportInjectionModule.class代替AndroidInjectionModule.class然后使用AndroidSupportInjection。

The problem is you havnt injected the DataManager class so you need to inject DataManager via constructor injection or you have to provide it in the AppComponent with the @Provides annotation and you should use AndroidSupportInjectionModule.class in place of AndroidInjectionModule.class as When your activities are extending AppCompatActivity then the AndroidSupportInjection is used.

@Component(modules = {AndroidSupportInjectionModule.class, AppModule.class, ActivityBuilder.class})
public interface AppComponent {

    void inject(AppApplication networkApplication);

    @Component.Builder
    interface Builder {
        @BindsInstance
        Builder application(AppApplication application);

        AppComponent build();
    }

}

这篇关于Android错误:找不到符号类DaggerAppComponent的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆