4

私はロボギスの初心者です、助けてください。メソッドでいくつかのデータを初期化するアプリケーション計算MyApplicationがあります。onCreateまたPOJO、私は自分で使用したいビジネスロジックを持っていMainActivityます(以下のコードスニペットを参照してください)。アプリケーションで初期化したデータにアクセスするために注入する必要がありMyApplicationますが、このコードは前に呼び出され、があります。POJOonCreateonCreateNullPointerException

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 カスタム モジュール アプリケーション コンテキストの回答に基づいて、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 に答える