android – MVP演示者内部的上下文相关问题

我是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方法发送一个调用一样

相关文章

SQLite架构简单,又有Json计算能力,有时会承担Json文件/RES...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器...
安卓开发,利用SQLite实现登陆注册功能