当前位置: 首页 > 知识库问答 >
问题:

如果没有注入构造函数,则无法提供RequestQueue

仉宪
2023-03-14

我正试图从这篇中级文章中学习Dagger2,并将RequestQueue作为活动级依赖项传递:https://proandroiddev.com/dagger-2-annotations-binds-contributesandroidinjector-a09e6a57758f我可以很好地创建应用程序组件,但我在ContributesAndroidInjector方面遇到了很多麻烦。应用类别:

public class PokemonApplication extends Application {
    private static AppComponent appComponent;
    public static AppComponent getAppComponent(){
        return appComponent;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        appComponent=buildMyComponent();
    }

    private AppComponent buildMyComponent() {
        return DaggerAppComponent.builder().appmod(this).build();
    }


}

应用模块:

 @Module
    public abstract   class AppModule {
        @ContributesAndroidInjector(modules = VolleyModule.class)
        abstract MainActivity mainActivity();


        @Provides
        @Singleton
         static SharedPreferences providePreferences(Application application) {
            return application.getSharedPreferences("data", Context.MODE_PRIVATE);
        }
        @Provides
        @Singleton
        static Context getContext(Application application){
            return application.getApplicationContext();
        }

    }

应用组件:

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

    void inject(MainActivity mainActivity); //Error here.

    @Component.Builder
    interface Builder
    {
        AppComponent build();
        @BindsInstance Builder appmod(Application application);


    }

}

截击模块:

@Module
public abstract class VolleyModule {


    @Provides
    static RequestQueue getRequestQueue(Context context) {
        return Volley.newRequestQueue(context);
    }
}

主要活动:

 @Inject
    RequestQueue requestQueue;
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        PokemonApplication.getAppComponent().inject(this);

共有1个答案

彭展
2023-03-14

您的组件中的模块列表中也必须声明截击模块

  @Singleton
  @Component(modules = {RetrofitModule.class,AppModule.class, VolleyModule.class})
 类似资料:
  • //模块 //组件 `//预登录Presenter //预物流活动` //在一次创建中 //错误日志 错误:(18,53)错误:找不到符号类DaggerPresentComponent错误:(19,53)错误:找不到符号类DaggerUserLoginComponent错误:(19,10)错误:gorick.gradesprojectandroid.MVP. Presenter. Presente

  • 所以我正在尝试将我的整个应用程序从匕首迁移到刀柄,显然我无法注入活动和碎片。 我的活动: 我的片段: 我的应用程序类: 像这样注入我的活动: 它抛出了这个错误: 项目级成绩: 应用级 Gradle(所有 3 个模块): 会不会是我的活动和片段扩展了不能用@ AndroidEntryPoint注释的基,因为它们有类型参数??救命啊! 同样在 dagger2 中,我使用了如下接口: 它的工作,但柄据说

  • 我是新来的,用匕首。所以,我不能解决这个有什么问题。我只想问在这里解决它。 这是错误: c:\ Users \ MSI \ Documents \ MyAndroidProjects \ movie projects \ App \ build \ generated \ hilt \ component _ sources \ debug \ com \ example \ movie App

  • 问题内容: 我正在尝试在我的项目中实现dagger2,但遇到错误“ android.app.Application必须在没有@Inject构造函数或@Provides注释方法的情况下才能提供 ”。 这是我的代码: App.java di / AppModule.java di / AppComponent.java di / TestClassModule.java di / TestClassC

  • 有人能帮助实现没有注释的Guice吗? pom。xml 我所尝试的: 我得到的错误是: 我理解这个错误。 但是我希望我可以“指向”Guice到正确的构造函数......而不是使用注释。 如您所见,使用默认/空构造函数不是一个好选择,因为这个示例很简单,但我想坚持使用基于构造函数的注入。 附加: 根据我在评论中从赫曼特·辛格那里得到的“暗示”,我想我离得更近了。 我创建了一个ProductionIn

  • 我想在我的片段(HomeFragment)中注入一个依赖项(HomeViewModel)。 我有一个类(HomeViewModelImpl)实现了该抽象(HomeViewModel),在这个类中,我当然覆盖了父级的方法。 抽象类(HomeViewModel)是从BaseViewModel扩展而来的抽象类。 BaseViewModel是一个普通的开放类,它从Android生命周期组件的ViewMod