0
如何使用匕首2以便我可以使用共享首選項的抽象表示形式,而不必在每次使用它時都要初始化接口? 我有共同的喜好在數據層像這樣的包裝:如何使用匕首2以便我可以使用共享偏好的抽象表示?
public interface SharedPrefsWrapper {
void putBoolean(String key, boolean value);
boolean getBoolean(String key);
void putString(String key, String value);
String getString(String key);
void putInt(String key, int value);
int getInt(String key);
void putFloat(String key, float value);
float getFloat(String key);
void putLong(String key, long value);
long getLong(String key);
}
然後,我有它在應用層實現:
public class SharedPreferenceImpl implements SharedPrefsWrapper {
private SharedPreferences sharedPreferences;
private Context context;
private static final String PREFS= "Wyat_prefs";
public SharedPreferenceImpl(Context context) {
this.context = context;
}
@Override
public void putBoolean(String key, boolean value) {
}
@Override
public boolean getBoolean(String key) {
return false;
}
@Override
public void putString(String key, String value) {
SharedPreferences.Editor editor = context.getSharedPreferences(PREFS,0).edit();
editor.putString(key,value);
editor.apply();
}
@Override
public String getString(String key) {
sharedPreferences = context.getSharedPreferences(PREFS,0);
return sharedPreferences.getString(key,null);
}
,我做了依賴注入,像這樣的匕首:
@Provides @Singleton
SharedPreferenceImpl providesSharedPreference(WyatApplication wyatApplication){
return new SharedPreferenceImpl(wyatApplication);
}
@Provides @Singleton
SharedPrefsWrapper providesSharedPrefsWrapper(SharedPreferenceImpl sharedPreference){
return sharedPreference;
}
@Singleton @Component(modules = AppModule.class)
public interface AppComponent {
WyatApplication wyatapplication();
WyatRepository wyatrepository();
SharedPrefsWrapper sharedPreference();
}
當我試圖從主持人的共享偏好中保存一些東西時,我得到一個空指針,我試圖像這樣保存它:
sharedPrefsWrapper.putString("token",accessToken.getAccessToken());
從而使抽象used.I已籤,我可以看到當我登錄它,所以它是沒有問題的訪問令牌。 我忘了做些什麼,或者我使用了錯誤的方法?
編輯: 我注入這樣的包裝到主持人
public class LoginPresenter implements Presenter<LoginView> {
private GetAccessTokenUseCase getAccessTokenUseCase;
private Subscription subscription;
private String email;
private String password;
@Inject
SharedPrefsWrapper sharedPrefsWrapper ;
你在哪裏注入包裝器實現? – Phil
@Phil我在編輯中添加了代碼以顯示我如何注入包裝。我沒有在任何地方注入實施。 – zacmwa
模塊和組件看起來沒問題。如果它們不是,你的代碼就不會編譯。你如何在你的片段或活動中注入演示者?我認爲這是問題 –