2017-09-25 8 views
2

Android SharedPreferencesクラスをラップする必要がありますか?はいの場合は、簡単な使用例を教えてください。Dagger 2とRxJava2でSharedPreferencesをラップする

私はSharedPreferencesの使い方を知っていますが、それをラッピングしてDagger 2とRxJava2を提供することについては混乱しています。

答えて

4

通常は、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を注入することができます。私はこれが物事をクリアすることを願っています。

+0

あなたはそれのための生のサンプルを与えることができますか? –

+0

Btw、タイトルにタイプミスがあります。同じ問題の人がこのスレッドを見つけることができるように、それを変更することができます。 – JesperQv

関連する問題