我创建了一个EmailComponent接口,其中包含2个模块EmailModule和Networkmodule,我试图在Activites之间共享Email对象和Okhttpclient对象。在ActivityA
中,我做到了:
EmailComponent component = DaggerEmailComponent.builder()
.emailModule(new EmailModule())
.netWorkModule(new NetWorkModule()).build();
component.Email().sendEmail();
这很好。我的问题是如何在不再次调用DaggerEmailComponent构建代码的情况下将它们注入ActivityB
中?
如果我尝试在ActivityB
中使用字段注入,例如下面的代码,则会崩溃。
@Inject Email email
email.sendMail(); // App crash.
正在努力实现什么目标?如果是,我在做什么错了?
答案 0 :(得分:1)
为避免一次又一次地制作EamilComponent
,您可以进行基本活动并在其中移动制作组件的代码。或者,您可以制作Application
的子类,然后在其中制作一个静态组件,然后可以在应用程序中的任何位置使用它。您必须获取NPE,因为该字段可能尚未初始化。
要使用Application
子类中的静态组件,请在Dagger组件中以基本活动作为参数创建一个方法,然后在活动的onCreate之后使用Application子类中的静态EamilComponent调用该方法。您甚至可以在onCreate之前在组件中调用方法。