2017-05-28 21 views
0

レトロフィットサービスから受け取ったデータをシングルトンクラスにマップしようとしています。これは、getInstance()スタティックメソッドが呼び出されていないためです.jsonをオブジェクトにマップするときに、INSTANCE変数が初期化されず、次回にMyClass.getInstance()を呼び出すと、私はretrofitから受け取ったものではなくデフォルト値を持つオブジェクトを取得します。改造からシングルトンクラスにデータを保存するにはどうすればいいですか?シングルトンクラスへのjsonマッピングの改良

P.S. ViewPagerの2番目のフラグメントで、最初のフラグメントのモデルで受け取ったのと同じオブジェクトを使用する必要があるため、これが必要です。

マイシングルトンクラス:

public final MySingletonClass { 

    //pirivate final fields; 

    private MySingletonClass() { 
     //default initialization fields 
    } 


    public static MySingletonClass getInstance() { 
     return MySingletonClassSingletonHelper.INSTANCE; 
    } 

    private static class MySingletonClassSingletonHelper { 
     private static final MySingletonClass INSTANCE = new MySingletonClass(); 
    } 

    //getters 

} 

OK、誰もが私が改造を使う方法を知っておく必要がある場合:

@Override 
public Observable<MySingletonClass> loadData(Integer params) { 
    return mRetrofitInterface.getMySingletonClass(params).subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()); 
} 


public interface MySingletonClassService { 
@POST("some address") 
Observable<MySingletonClass> getMySingletonClass(@Path("idd") Integer idd); 
} 
+0

中から、あなたのデータはあなたのアプリケーションの複数の実行を介して、または唯一の実行を通じて持続しますか? – Sac

+0

シングル・シングル・ラン。同じアドレスへの次の要求まで(リフレッシュ)。 – Sermilion

答えて

1

は、私は、これが最良の選択肢であるとは思わないが、あなたはそれを行うことができます:

public final MySingletonClass { 

    //private final fields; 

    private MyRetrofitObject foo; 

    private MySingletonClass() { 
     //default initialization fields 
    } 


    public static MySingletonClass getInstance() { 
     return MySingletonClassSingletonHelper.INSTANCE; 
    } 

    private static class MySingletonClassSingletonHelper { 
     private static final MySingletonClass INSTANCE = new MySingletonClass(); 
    } 

    //getters 

    public void setObject(MyRetrofitObject foo) { 
     this.foo = foo; 
    } 

} 

Retrofitからオブジェクトを返すと、シングルトンに設定されます。

INSTANCE.setObject(fooFromRetrofit); 

これは、オブジェクトの解析を分離メモリストレージ

+0

これも私が思ったことですが、Retrofit自身がシングルトンのマッピングを処理できることを期待していました。私はこれが得られるほど良いと思う。 – Sermilion

+1

正直これはあなたが思っているよりも優れていますhttps://en.wikipedia.org/wiki/Single_responsibility_principle – Blundell

+0

受信したデータを表す別個のオブジェクトと、そのオブジェクトからシングルトンとして使用されるオブジェクトを表すオブジェクトがあることを意味しますか?私は、私がシングルトンとして使うオブジェクトを変更する必要があるかもしれず、受信したデータを表現するためのオブジェクトには影響しないことがわかります。私はあなたを正しく理解していますか? – Sermilion

関連する問題