在 MVP 中,您不要在 Presenter (P) 层中使用 Context 或 Android SDK/Framework 中的任何其他内容!该层用于除 Android 相关内容之外的任何其他内容。
1) 如何在 Presenter 中访问共享首选项。
你没有。如果您需要来自Presenter 中的SharedPrefences 的值,则可以通过方法调用将该值传递给Presenter。
例子:
class MainActivity{
String birthday = SharedPrefence.getString(..);
presenter.setSavedBirtday(birthday);
}
2)如何在presenter中访问其他系统服务。
如前所述;您不访问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 类完成的任何事务期间,需要上下文来访问数据库。
有些人不喜欢这样回答其他人的意愿,这只是一个建议。
您可以通过在您的应用程序类(扩展应用程序的类;see how here)中使用全局 SQLite 来访问您的 SQLite,因为您的 SQLlite 对于整个应用程序是全局的,而不仅仅是特定的 Activity 当您需要将数据从 SQLite 传递到 Activity,然后您首先将其传递给 Presenter,然后从 Presenter 传递到您的 Activity,就像我们发送对 Vibrator 方法的调用一样