
我知道如何使用SharedPreferences,但是当涉及到包装它并提供Dagger 2和RxJava2时,我很困惑.
解决方法 我通常只使用名为localstorage的接口或类似的东西来包装它.然后将一个Context注入实现并像往常一样实现您的SharedPreferences.如果你想使用Rx,只需确保你的接口方法返回Observables.然后,只要你需要使用SharedPeferences,只需注入一个localstorage就可以了.
编辑:我不知道你需要多少代码,但这里是一个示例.
首先定义一个接口
public interface localstorage { voID writeMessage(String message); Observable<String> readMessage();} 然后使用SharedPreferences编写此接口的实现.那么我们需要做些什么呢?好吧,我们真正需要的只是一个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(或者你决定称之为的任何东西).我们已经知道我们需要一个上下文来使SharedPrefStorage工作,所以把它作为一个参数,dagger会注入它(前提是你有一个带有上下文的@ProvIDes方法,例如你的应用程序类).
@Modulepublic 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并将其注入到我们想要的任何地方.
@Singleton@Component(modules = AppModule.class)public interface AppComponent { localstorage localstorage();} 现在我们可以在需要的时候注入localstorage.我希望这可以解决问题.
总结以上是内存溢出为你收集整理的android – 用Dagger 2和RxJava2包装SharedPreferences全部内容,希望文章能够帮你解决android – 用Dagger 2和RxJava2包装SharedPreferences所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)