MVP演示者

时间:2017-06-24 11:52:52

标签: android sqlite mvp

我是Android MVP模式的新手并且在我的项目上工作我在演示者中有一些与Android Context相关的基本问题。虽然有很多与此相关的答案,但我没有找到一个可以解决我问题的完美答案。

我有以下问题:

  1. 如何在演示者中访问共享首选项。
  2. 如何访问演示者内的其他系统服务。
  3. 如果我正在使用SQLite数据库,那么在我的数据库中的任何事务期间,通过从演示者调用我的SQLite Helper类来完成访问数据库的上下文。
  4. 如果我将在演示者中传递我的活动上下文,那么在单元测试期间会出现问题,根据MVP格式,这也是违规行为。 我需要一个完美的解决方案,以便我的代码质量不会降低。

    注意:我不想使用匕首工具,所以答案应该是匕首独立

1 个答案:

答案 0 :(得分:3)

在MVP中,你不要在Context(P)层中使用Presenter或Android SDK / Framework中的任何其他内容!这个图层不是Android相关的东西。

1)如何在演示者中访问共享偏好设置。

你没有。如果您需要SharedPrefencesPresenter的值,则可以通过方法调用将值传递给Presenter

示例:

class MainActivity{
 String birthday = SharedPrefence.getString(..);
 presenter.setSavedBirtday(birthday);

 }

2)如何访问演示者内的其他系统服务。

如前所述;您无法访问Presenter中的系统服务。 您可以做的是从演示者调用系统服务。

振动器示例:

1 - 创建一个界面:

interface OnSystemServiceCaller{
  onVibratorCall();
}

2 - 在活动中实施

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类中使用全局SQLite来访问ApplicationContext()(扩展应用程序的类; see how here,因为您的SQLlite是整个应用程序的全局,而不仅仅是特定的活动当您需要将数据从SQLite传递到Activity时,您首先将其传递到Presenter,然后从Presenter传递到Activity,就像我们发送呼叫一样到我们的振动器方法