2017-09-25 6 views

답변

4

일반적으로 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를 주입 할 수 있습니다. 이 일이 깨끗해지기를 바랍니다.

+0

원시 샘플을 줄 수 있습니까? –

+0

Btw, 제목에 오타가 있습니다. 같은 문제를 가진 사람들이이 스레드를 찾을 수 있도록이를 변경하려고 할 수 있습니다. – JesperQv