2012-08-31 63 views
4

我是Roboguice的新手,請大家幫忙。我有一個應用程序MyApplication,其中onCreate方法我初始化一些數據。另外我有一個POJO buisiness邏輯,我想用我的MainActivity(請參閱下面的代碼片段)。我需要將MyApplication注入到POJO以獲取我在應用程序的onCreate中初始化的數據,但此代碼在onCreate之前調用,並且我有NullPointerExceptionRoboguice 2.0向POJO注入應用程序

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; 

} 
+0

你是否設法最終解決它? –

+1

還沒有,我只是讓我的應用程序單身,並通過MyApplication.getInstance()POJO中獲取實例,而不注入 –

回答

3

編輯:找到一種方法在RoboGuice 2.0中根據RoboGuice custom module application context中的答案做到這一點。

注入在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); 
    } 

}

+1

有一個錯誤https://code.google.com/p/roboguice/issues/detail?id = 193&thanks = 193&ts = 1335334124在RoboGuice 2.0中,在某些情況下可能需要您綁定到提供程序,該提供程序僅包裝上下文實例。有關示例解決方法代碼,請參閱https://groups.google.com/forum/#!msg/roboguice/XYZdGm_2fNg/riyiDLWHlpcJ。 –

1

如果你需要不需要一個背景下,剛剛接觸XML資源數據或res/raw,你可以從任何地方注入。

只需使用Roboguice.getInjector()即可獲取Resources對象的副本。