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

仅用于基本活动的依赖项注入会使子活动崩溃

子车俊材
2023-03-14
@Subcomponent
public interface BaseActivityInjector extends AndroidInjector<BaseActivity> {
  @Subcomponent.Builder
  abstract class Builder extends AndroidInjector.Builder<BaseActivity> {}
}

@Module(
  includes = {
    AppModule.class,
    AndroidSupportInjectionModule.class,
    InitializerModule.class},
  subcomponents = {
     BaseActivityInjector.class
  })
public abstract class AppInjectionModule {
  @Binds
  @IntoMap
  @ActivityKey(BaseActivity.class)
  abstract AndroidInjector.Factory<? extends Activity> bindBaseActivityInjectorFactory(BaseActivityInjector.Builder builder);
}

@Module
public class InitializerModule {
  @Provides
  public InputProvider getInputProvider() {
    return new InputProviderImpl();
  }
}

public abstract class BaseActivity extends FragmentActivity {
@Inject
InputProvider inputProvider;

    protected void onCreate(Bundle savedInstanceState) {
        AndroidInjection.inject(this);
    }
}

无法启动活动ComponentInfo{com.app.mobile.android.dev/com.app.mobile.android.splashscreen}:java.lang.IllegalArgumentException:没有为类绑定的注入器工厂。注入器工厂被绑定为com.delta.mobile.android.splashScreen:[com.app.mobile.android.uikit.view.baseActivity]的超类型。你的意思是为亚型绑定注射器工厂吗?

错误日志通过SplashScreen指向BaseActivity中的AndroidInjection.inject(this);

共有1个答案

曾昂然
2023-03-14

AndroidInjection按类型查找活动的正确组件。如果您尝试注入splashscreen,但它找不到为splashscreen注册的组件,那么它将抛出异常。

如果您只想注入baseactivity,而不是子级,那么就不能使用Androidinject。您必须自己创建组件,并以这种方式注入活动。

或者,您不能扩展BaseActivity,也不能为每个活动声明一个组件,并按照预期使用AndroidInjection。如果您注入子活动,它也将注入父活动中的字段。

 类似资料:
  • 我只是开始尝试在我非常简单的项目上使用Hilt。现在它都是在Dagger2上,但我想迁移到Hilt。 我有一个活动: 和下面这样的基本活动: 或者(就像我用匕首那样): 另外,我只是一个初学者,所以,也许我错过了什么。我将继续搜索:) 感谢您的时间和回答:) java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“Android.content.pm.Appli

  • 如何在扩展Activity而不是AppCompatActivity的类中注入改装实例?这是模块: 这是我的主要活动: 这导致 用@AndroidEntryPoint注释的活动必须是 androidx.activity.ComponentActivity 的子类。(例如 FragmentActivity、AppCompatActivity 等)[剑柄]处理未完成。有关详细信息,请参阅上面的错误。 我

  • 我正在为导航构建一个基本活动,并希望有一些灵活的活动,这样活动就可以向基本活动指定要膨胀的布局。 有没有更好的方法实现这一点?也许用一个内容框架设置一个基本布局,然后膨胀到那个? 如有任何建议,将不胜感激。

  • 我的问题是,是否有某种方法可以基于活动的spring配置文件或其他方法来有条件地提供依赖关系?

  • 有谁能帮我..我想根据我的URL在我的菜单上添加一个活动类 这是密码 可能的URL 所以,我需要的是当URL是http://www.whatever.com/?tag=automotive,big-data时,我想再添加一个类,比如active。 示例: HTML:

  • 问题内容: 我在一个Android项目中使用ORMLite,并且我不想使用扩展活动,因为我是在AsyncTask上将值插入数据库中。 在文档中说: “如果您不想扩展和其他基类,那么您将需要复制它们的功能。您需要在代码的开头进行调用,保存帮助程序并根据需要使用它,然后在你完成了。” 它还说要在中添加数据库帮助程序类。所以我不确定我在做什么错。 我正在使用一个为我的数据层调用的类,如下所示: 我正在使