我正在尝试使用MVP模式检查互联网连接。为此,我有一个类a : 3
b : 2
c : 1
,它的构造函数中包含MyAppUtil
。这是我的MVP模型课程,我正在其中使用Context
来检查Internet连接:
MyAppUtil.checkConnection(context)
在VIEW内部,我通过以下方式初始化演示者:
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();
}
}
}
如您所见,我在MVP模型中使用presenter = new MainActivityPresenterImpl(this, new MainActivityInterectorImpl(this));
。 MVP模式可以吗?还有更好的方法吗?
答案 0 :(得分:1)
是的,这是不好的做法。制作一个连接检查器或类似内容的包装,然后将其传递给模型或演示者。
它应该看起来像这样:
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
}
}
}
答案 1 :(得分:1)
交互器可以从数据库,Web服务或任何其他数据源中获取数据。获取数据后,交互器将数据发送给演示者。因此,在您的UI中进行更改。您还可以将交互器放入您的 Presenter 。
上下文是MVP中Android 视图层的一部分,因此 Presenter 对此一无所知,也不应将其转移到演示者或交互者。
您必须将所需的方法添加到 View 界面,并在您的Android View 组件(例如Activity或Fragment)中实现它。