SharedPreferences
클래스를 래핑해야합니까? 그렇다면 간단한 예제를 제공해 주시겠습니까?Dagger 2와 RxJava2로 SharedPreferences 줄이기
나는 SharedPreferences
을 사용하는 방법을 알고 있지만 포장하고 Dagger 2와 RxJava2를 제공 할 때는 혼란 스럽다.
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
입니다. 단검 2 모듈에서 LoginStorage
을 생성 할 때 생성자를 통과 시키므로 걱정하지 않아도됩니다.
public class SharedPrefStorage implements LocalStorage {
private Context context;
public SharedPrefStorage(Context context) {
this.context = context;
}
@Override
public void writeMessage(String message) {
context.getSharedPreferences("sharedprefs", Context.MODE_PRIVATE)
.edit().putString("myMessage", message).apply();
}
@Override
public Observable<String> readMessage() {
return Observable.fromCallable(new Callable<String>() {
@Override
public String call() throws Exception {
return context.getSharedPreferences("sharedprefs", Context.MODE_PRIVATE)
.getString("myMessage", "");
}
}
}
}
우리가 단순히 읽고 공상 평소 아무것도로 값을 기록시피. 이제 우리는 이것을 Dagger 2 AppModule (또는 당신이 그것을 호출하기로 결정한 것)에 추가합니다. 우리는 SharedPrefStorage가 작동하도록 Context가 필요하다는 것을 이미 알고 있으므로 매개 변수로 넣고 대거가 삽입합니다 (@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);
}
}
그리고, 물론, 우리가 실제로 로컬 저장을 노출하고 우리가 그것을 원하는 위치 주입 할 수 있도록의 우리의 단검이 구성 요소를 추가 할 수 있습니다.
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
LocalStorage localStorage();
}
이제 우리는 필요할 때마다 LocalStorage를 주입 할 수 있습니다. 이 일이 깨끗해지기를 바랍니다.
원시 샘플을 줄 수 있습니까? –
Btw, 제목에 오타가 있습니다. 같은 문제를 가진 사람들이이 스레드를 찾을 수 있도록이를 변경하려고 할 수 있습니다. – JesperQv