代码之家  ›  专栏  ›  技术社区  ›  Bismeet singh

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

  •  1
  • Bismeet singh  · 技术社区  · 6 年前

    我正试图从这篇中级文章中学习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();
        }
    
    
    }
    

    AppModule(应用模块):

     @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 回复  |  直到 6 年前
        1
  •  0
  •   Blackbelt    6 年前

    VolleyModule 还必须在您的 Component

      @Singleton
      @Component(modules = {RetrofitModule.class,AppModule.class, VolleyModule.class})