gpt4 book ai didi

android - 用 Dagger 2 和 RxJava2 包装 SharedPreferences

转载 作者:太空宇宙 更新时间:2023-11-03 11:36:33 24 4
gpt4 key购买 nike

我是否需要包装 Android SharedPreferences 类?如果是,能否请您提供一个简单的工作示例?

我知道如何使用 SharedPreferences,但是当涉及到包装它并为它提供 Dagger 2 和 RxJava2 时,我感到很困惑。

最佳答案

我通常只是使用一个名为 LocalStorage 或类似的接口(interface)来包装它。然后将 Context 注入(inject)到实现中,并像往常一样实现您的 SharedPreferences。如果您想使用 Rx,只需确保您的接口(interface)方法返回 Observables

然后,每当您需要使用 SharedPeferences 时,只需注入(inject)一个 LocalStorage,一切就绪。

编辑:我不确定您需要多少代码,但这里有一个示例。

从定义接口(interface)开始

public interface LocalStorage {
void writeMessage(String message);
Observable<String> readMessage();
}

然后使用SharedPreferences编写这个接口(interface)的实现。那么我们需要什么才能让它发挥作用呢?好吧,我们真正需要的只是一个 Context,但我们不用担心,当我们在 dagger 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(或您决定如何调用它)。我们已经知道我们需要一个 Context 来让 SharedPrefStorage 工作,所以把它作为一个参数,dagger 会注入(inject)它(前提是你有一个带有上下文的 @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);
}
}

然后,当然,让我们将它添加到我们的 Dagger 2 组件中,以便我们真正公开 LocalStorage 并可以将它注入(inject)到我们想要的任何地方。

@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
LocalStorage localStorage();
}

现在我们可以在需要时注入(inject)我们的 LocalStorage。我希望这能解决问题。

关于android - 用 Dagger 2 和 RxJava2 包装 SharedPreferences,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46401184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com