我是Android MVP模式的新手并且在我的项目上工作我在演示者中有一些与Android Context相关的基本问题。虽然有很多与此相关的答案,但我没有找到一个可以解决我问题的完美答案。
我有以下问题:
如果我将在演示者中传递我的活动上下文,那么在单元测试期间会出现问题,根据MVP格式,这也是违规行为。 我需要一个完美的解决方案,以便我的代码质量不会降低。
注意:我不想使用匕首工具,所以答案应该是匕首独立
答案 0 :(得分:3)
在MVP中,你不要在Context
(P)层中使用Presenter
或Android SDK / Framework中的任何其他内容!这个图层不是Android相关的东西。
1)如何在演示者中访问共享偏好设置。
你没有。如果您需要SharedPrefences
中Presenter
的值,则可以通过方法调用将值传递给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
,就像我们发送呼叫一样到我们的振动器方法