4

Android用のRoboGuice2(およびGuiceについてはGuice)を初めて試しており、現在行き詰まっています。これを行う方法の例を見つけることができませんでした。誰かが正しい方法を説明して見せてくれることを願っています. コンストラクターで文字列をパラメーターとして受け取るオブジェクトを @Inject したい。以下の例:

public class MyActivity extends RoboFragmentActivity {

    @Inject MyObject obj;

    public void onCreate(Bundle savedInstanceState) {
       super.onCreate();
       obj.print();
    }
}



public class MyObject {

    private String name;

    @Inject
    public MyObject(String name) {
       this.name = name;
    }


    public void print() {
        Log.d("debug", this.name);
    }
}

これの例と説明にとても感謝しています。

4

1 に答える 1

2

コンストラクターにパラメーターを渡すときに RoboGuice を使用してオブジェクトを注入できるかどうかはわかりません (これはお勧めできません)。ファイル システムに書き込みを行うそのオブジェクトで呼び出すメソッドを変更して、そのStringパラメーターを取得することを検討することをお勧めします。そのオプションが気に入らない場合は、書き込み関数を呼び出す前に、そのパラメーターを設定するパブリック メソッドを使用できます。

元:

@Inject
private MyClass myClass;

public void onCreate(Bundle savedInstanceState) {

    super.onCreate();
    myClass.setFileName("somefile.txt");
    myClass.writeToFile();
}

または

@Inject
private MyClass myClass;

public void onCreate(Bundle savedInstanceState) {

    super.onCreate();
    myClass.writeToFile("somefile.txt");
}

編集:

したがって、いくつかの調査を行った後、これが奨励されていないという私の声明を撤回します. 私が見た例から、あなたのコードはほとんど正しいようです。このリンクは、私が見つけた最も完全な例を提供しました。コンストラクターに String を注入する場合、2 つのオプションがあるようです。アプリ構成バインディングで設定できます(これにより、おそらく望ましくないシングルトンが本質的に作成されます)。2 番目のオプションは、Provide (Factory と同様) を作成し、そのプロバイダーを使用することです。これらのオプションは両方とも、上記の記事で概説されています。

于 2012-12-13T00:14:40.343 に答える