我正在尝试使用MVP模式检查互联网连接。为此我有一个类MyAppUtil
,它的构造函数中包含Context
。这是我的MVP模型类,我正在使用MyAppUtil.checkConnection(context)
检查互联网连接:
public class MainActivityInterectorImpl implements MainActivityContract.IInterector{
Context context;
MainActivityInterectorImpl(Context context) {
this.context = context;
}
@Override
public void getData(OnFinishedListener onFinishedListener) {
boolean result = MyAppUtil.checkConnection(context);
if (result == true) {
onFinishedListener.onSuccess();
} else {
onFinishedListener.onFailure();
}
}
}
在VIEW中,我正在通过以下方式初始化演示者:
presenter = new MainActivityPresenterImpl(this, new MainActivityInterectorImpl(this));
如您所见,我在MVP模型中使用Context
。 MVP模式可以吗?有更好的方法吗?
是的,这是不好的做法。制作连接检查器或类似事物的包装,然后将其传递给模型或演示者。
它应该看起来像这样:
class ConnectionChecker(private val context: Context) {
val isOnline: Boolean
get() {
return try {
val connectivityManager = context.getSystemService(
Context.CONNECTIVITY_SERVICE) as ConnectivityManager
connectivityManager.activeNetworkInfo != null &&
connectivityManager.activeNetworkInfo.isConnected
} catch (exception: Exception) {
false
}
}
}
Interactor可以从您的数据库,Web服务或任何其他数据源中获取数据。获取数据后,交互器将数据发送给演示者。因此,在UI中进行更改。您还可以将交互器放入Presenter中。
上下文是MVP中Android视图层的一部分,因此Presenter不应该对此有任何了解,也不应将其传输到Presenter或Interactor。
您必须向View界面添加所需的方法,并在Android View组件中实现它(例如,Activity或Fragment)。