【问题标题】:Android MVP with Volley带有 Volley 的 Android MVP
【发布时间】:2019-10-07 15:15:07
【问题描述】:

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

RequestQueue queue = Volley.newRequestQueue(this);

【问题讨论】:

  • 您应该使用 Koin 或 Dagger 等依赖注入库注入上下文。
  • 不,这不是一个坏习惯。你可以在你的 Application 类中创建它并在不同的地方使用它。

标签: android android-volley mvp android-mvp


【解决方案1】:

我可以建议完全抽象您的网络请求并创建一个处理网络请求的类。然后,您可以在创建此类时创建它。例如,在您拥有应用程序上下文的 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 来测试您的演示者,并且从您的演示逻辑中抽象出向服务器请求的实现细节。

【讨论】:

    【解决方案2】:

    我想我明白了。我不能保证答案的正确性,但它确实有效。

    我更改了我的 Presenter 构造函数,现在我应该将正确的视图隐式传递给演示者,因为在我的应用程序启动中,我传递的是一个片段,而不是一个视图。这就是我在 MainView 界面中创建 setPresenter 方法的原因。

     public MainPresenter(MainContract.MainView view, NetworkLayer networkLayer) {
        this.view = view;
        this.view.setPresenter(this);
        this.networkLayer = networkLayer;
    }
    

    现在我在 App 启动时设置 NetworkLayer(在 MainActivity 或 Application 类中)。在那里我可以访问应用程序上下文,并且可以通过网络层而不在演示者中存储上下文。为了在演示者和模型之间建立正确的连接,我在 NetworkLayer 中创建了一个设置器来传递正确的演示者。

        MainFragment mainFragment = new MainFragment();
        //Inject view and model
        MainContract.MainPresenter mainPresenter = new MainPresenter(mainFragment, NetworkLayer.getInstance(getApplicationContext()));
        NetworkLayer.getInstance(getApplicationContext()).setPresenter(mainPresenter);
    

    【讨论】:

      猜你喜欢
      • 2016-04-21
      • 1970-01-01
      • 2020-12-13
      • 2018-03-11
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多