4

我是Roboguice的新手,请帮忙。我有一个应用程序类,我MyApplication在其中onCreate初始化一些数据。我也有一个POJO我想在我的MainActivity(见下面的代码片段)中使用的商业逻辑。我需要注入MyApplicationPOJO访问我在应用程序中初始化的数据onCreate,但是此代码之前调用过onCreate并且我有一个NullPointerException.

public class MyApplication extends Application {

    private Properties applicationProperties;

    @Override
    public void onCreate() {
        super.onCreate();
        applicationProperties = loadApplicationProperties(APPLICATION_PROPERTIES_ASSET);
    }

    @SuppressWarnings("unchecked")
    public String getProperty(String key) {
        return applicationProperties.getProperty(key);
    }

}

@Singleton
public class POJO {

    @Inject
    private MyApplication application;

    @Inject
    public void init() {
        // NPE here, because application onCreate not called at this moment
        serverURL = application.getProperty(Constants.SERVER_URL);
    }
}

public class MainActivity extends RoboActivity {

    @Inject
    private POJO myPOJO;

}
4

2 回答 2

3

编辑:根据RoboGuice custom module application context中的答案在 RoboGuice 2.0 中找到了一种方法。

在 AbstractModule 构造函数中注入应用程序上下文,然后将其绑定以configure()供以后注入:

public final class MyModule extends AbstractModule
{
    private final MyApplication context;

    @Inject
    public MyModule(final Context context)
    {
        super();
        this.context = (MyApplication)context;
    }

    @Override
    protected void configure() {
        bind(MyApplication.class).toInstance(context);
    }

}

于 2013-03-26T15:26:09.317 回答
1

如果您需要的数据不需要上下文,只需访问 XML 资源或 res/raw,您可以从任何地方注入。

只需用于Roboguice.getInjector()获取 Resources 对象的副本。

于 2013-03-26T21:34:50.170 回答