Android SharedPreferences
クラスをラップする必要がありますか?はいの場合は、簡単な使用例を教えてください。Dagger 2とRxJava2でSharedPreferencesをラップする
私はSharedPreferences
の使い方を知っていますが、それをラッピングしてDagger 2とRxJava2を提供することについては混乱しています。
Android SharedPreferences
クラスをラップする必要がありますか?はいの場合は、簡単な使用例を教えてください。Dagger 2とRxJava2でSharedPreferencesをラップする
私はSharedPreferences
の使い方を知っていますが、それをラッピングしてDagger 2とRxJava2を提供することについては混乱しています。
通常は、LocalStorage
などのインターフェイスを使用してラップします。次に、Context
を実装に挿入し、いつものようにSharedPreferencesを実装します。 Rxを使用する場合は、インタフェースメソッドがObservables
を返すようにしてください。
次に、SharedPeferencesを使用する必要があるときはいつも、LocalStorage
が注入されていて、あなたはすべて設定されています。
編集:あなたが必要とするコードの量はわかりませんが、ここにサンプルがあります。
そしてSharedPreferencesを使用して、このインタフェースの実装を記述インタフェースpublic interface LocalStorage {
void writeMessage(String message);
Observable<String> readMessage();
}
を定義することから始め
。では、これが機能するには何が必要なのでしょうか?さて、本当に必要なのはContext
ですが、それについて心配することはありません.Dagger 2モジュールにLoginStorage
を作成するときにコンストラクタを渡します。
ご覧のとおり、値は通常通り読み書きしますが、何も気にしません。これをDagger 2 AppModule(またはそれを呼び出すことに決めたもの)に追加します。私たちはすでにSharedPrefStorageが動作するためにはコンテキストが必要であることを知っていますので、パラメータとして入れてください(@Providesメソッドにアプリケーションクラスなどの@Providesメソッドがある場合)。
@Module
public class AppModule {
private MyApplication app;
public AppModule(MyApplication app) {
this.app = app;
}
@Provides
@Singleton
public MyApplication provideApp() {
return app;
}
@Provides
@Singleton
public LocalStorage provideLocalStorage(MyApplication context)
return new SharedPrefStorage(context);
}
}
そして、もちろん、我々は実際のlocalStorageを公開し、我々はそれを好きな場所、それが注入持つことができるように私たちのダガー2コンポーネントにそれを追加してみましょう。我々は1が必要なとき
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
LocalStorage localStorage();
}
今、私達はちょうど私たちのlocalStorageを注入することができます。私はこれが物事をクリアすることを願っています。
あなたはそれのための生のサンプルを与えることができますか? –
Btw、タイトルにタイプミスがあります。同じ問題の人がこのスレッドを見つけることができるように、それを変更することができます。 – JesperQv