首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android MVP,截击

Android MVP,截击
EN

Stack Overflow用户
提问于 2019-10-07 23:15:08
回答 2查看 512关注 0票数 3

我有以下问题。我想在Android上实现MVP,使用Volley作为模型。问题是,Volley requestQueue需要上下文。我知道一种解决方案是创建一个静态上下文,但这是一个糟糕的做法。我应该如何用MVP创建这段代码。

代码语言:javascript
复制
RequestQueue queue = Volley.newRequestQueue(this);
EN

回答 2

Stack Overflow用户

发布于 2019-10-08 02:15:20

我可以建议完全抽象您的网络请求,并创建一个处理网络请求的类。然后,您可以在创建该类时创建它。例如,在具有应用程序上下文的Application类中。

代码语言:javascript
复制
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来测试您的展示器,并从您的展示逻辑中抽象出向服务器请求的实现细节。

票数 0
EN

Stack Overflow用户

发布于 2019-10-09 18:56:16

我想我想通了。我不能保证答案的正确性,但它是有效的。

我更改了我的Presenter构造函数,现在我应该隐式地将正确的视图传递给presenter,因为在我的App start中,我传递的是片段,而不是视图。这就是我在MainView接口中创建setPresenter方法的原因。

代码语言:javascript
复制
 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。

代码语言:javascript
复制
    MainFragment mainFragment = new MainFragment();
    //Inject view and model
    MainContract.MainPresenter mainPresenter = new MainPresenter(mainFragment, NetworkLayer.getInstance(getApplicationContext()));
    NetworkLayer.getInstance(getApplicationContext()).setPresenter(mainPresenter);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58272455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档