我有以下问题。我想在Android上实现MVP,使用Volley作为模型。问题是,Volley requestQueue需要上下文。我知道一种解决方案是创建一个静态上下文,但这是一个糟糕的做法。我应该如何用MVP创建这段代码。
RequestQueue queue = Volley.newRequestQueue(this);发布于 2019-10-08 02:15:20
我可以建议完全抽象您的网络请求,并创建一个处理网络请求的类。然后,您可以在创建该类时创建它。例如,在具有应用程序上下文的Application类中。
class NetworkRequest(
private val context: Context
) {
val queue = Volley.newRequestQueue(context)
fun doNetworkRequest() {
val request = StringRequest(...)
queue.add(request)
}
}
class Presenter(
private val networkRequest: NetworkRequest
) {
. . .
}通过这种方式,您可以通过模拟NetworkRequest来测试您的展示器,并从您的展示逻辑中抽象出向服务器请求的实现细节。
发布于 2019-10-09 18:56:16
我想我想通了。我不能保证答案的正确性,但它是有效的。
我更改了我的Presenter构造函数,现在我应该隐式地将正确的视图传递给presenter,因为在我的App start中,我传递的是片段,而不是视图。这就是我在MainView接口中创建setPresenter方法的原因。
public MainPresenter(MainContract.MainView view, NetworkLayer networkLayer) {
this.view = view;
this.view.setPresenter(this);
this.networkLayer = networkLayer;
}现在我在应用程序启动时设置NetworkLayer (在MainActivity或在应用程序类中)。在那里,我可以访问应用程序上下文,并且可以通过网络层,而无需在presenter中存储上下文。为了在presenter和model之间建立正确的连接,我在NetworkLayer中创建了一个setter来传递正确的presenter。
MainFragment mainFragment = new MainFragment();
//Inject view and model
MainContract.MainPresenter mainPresenter = new MainPresenter(mainFragment, NetworkLayer.getInstance(getApplicationContext()));
NetworkLayer.getInstance(getApplicationContext()).setPresenter(mainPresenter);https://stackoverflow.com/questions/58272455
复制相似问题