我是Android MVP模式的新手并且在我的项目上工作我在演示者中有一些与Android Context相关的基本问题.虽然有很多与此相关的答案,但我没有得到一个可以解决我的问题的完美答案.
我有以下问题:
>如何在演示者中访问共享首选项.
>如何访问演示者中的其他系统服务.
>如果我正在使用SQLite数据库,那么在我的数据库中的任何事务期间,通过从演示者到我的SQLite Helper类的调用来完成访问数据库的上下文.
如果我将在演示者中传递我的活动上下文,那么在单元测试期间会出现问题,根据MVP格式也是违规.
我需要一个完美的解决方案,以便我的代码质量不会降低.
注意:我不想使用匕首工具,所以答案应该是匕首独立
解决方法:
在MVP中,您不要在Presenter(P)层中使用Context或Android SDK / Framework中的任何其他内容!这个图层不是Android相关的东西.
1)如何在演示者中访问共享首选项.
你没有.如果需要Presenter中SharedPrefences的值,则可以通过方法调用将值传递给Presenter.
例:
class MainActivity{
String birthday = SharedPrefence.getString(..);
presenter.setSavedBirtday(birthday);
}
2)如何访问演示者内部的其他系统服务.
如前所述;您不在Presenter中访问系统服务.
您可以做的是从Presenter调用系统服务.
振动器示例:
1 – 创建一个界面:
interface OnSystemServiceCaller{
onVibratorCall();
}
2 – 在Activity中实现它
class MainActivity implements OnSystemServiceCaller{
@Override
onVibratorCall(){
Vibrator v = (Vibrator) getSystemService(VIBRATOR);
v.vibrate(50);
}
}
3 – 来自演示者的电话
class Presenter{
OnSystemServiceCaller listener;
public void ifButtonClicked(){
listener.onVibrateCall();
}
}
3)如果我正在使用SQLite数据库,那么在我的数据库中的任何事务期间,通过从演示者到我的SQLite Helper类的调用来完成访问数据库的上下文.
有些人不会喜欢这个答案,这只是一个建议.
您可以通过在app类中使用全局ApplicationContext()来访问您的SQLite(扩展Application的类; see how here,因为您的SQLlite是整个应用程序的全局,而不仅仅是特定的Activity,当您需要将数据从SQLite传递到Activity时然后你将它首先传递给Presenter,从Presenter传递给你的Activity,就像我们向Vibrator方法发送一个调用一样
原文地址:https://codeday.me/bug/20190627/1306971.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。