如何使用匕首2

时间:2018-06-28 12:51:26

标签: android dagger-2

我创建了一个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.

正在努力实现什么目标?如果是,我在做什么错了?

1 个答案:

答案 0 :(得分:1)

为避免一次又一次地制作EamilComponent,您可以进行基本活动并在其中移动制作组件的代码。或者,您可以制作Application的子类,然后在其中制作一个静态组件,然后可以在应用程序中的任何位置使用它。您必须获取NPE,因为该字段可能尚未初始化。

要使用Application子类中的静态组件,请在Dagger组件中以基本活动作为参数创建一个方法,然后在活动的onCreate之后使用Application子类中的静态EamilComponent调用该方法。您甚至可以在o​​nCreate之前在组件中调用方法。