排球 - CancelAll()不会停止发送请求

时间:2017-05-14 10:28:22

标签: android android-volley

我想完全阻止凌空请求发送数据,调用mRequestQueue.cancelAll(TAG)  方法只是停止响应返回响应处理程序,但发送数据进程仍然在后台工作,我发送一个大的byte []文件,所以一旦用户取消发送过程,我想中断请求并停止发送数据。 任何人都可以想到解决这个问题的解决方法吗?

1 个答案:

答案 0 :(得分:0)

由于mRequestQueue.cancelAll(TAG)方法只是停止响应返回响应处理程序并继续在后台发送请求,我可以通过编辑齐射库本身找到解决此问题的解决方法,以下是步骤:

  • 从此处克隆排球库:https://android.googlesource.com/platform/frameworks/volley/

  • 将其作为模块导入项目。

  • 导航到com.android.volley.toolbox.HurlStack java类,转到addBodyIfExists()方法
  • 替换此代码:

    DataOutputStream out = new DataOutputStream(connection.getOutputStream());
    out.write(body);
    out.close();
    

使用此代码:

    DataOutputStream out = new DataOutputStream(connection.getOutputStream());
    final int offset = 0;
    for (int i = offset; i < offset + body.length; i++) {
        //if at any time of sending the body, the mCancel boolean became true, then stop sending the request and break the loop
        if (request.isCanceled()) {
            Log.d("Tracing Request", "request.isCanceled()");
            out.close();
            break;
        }
        Log.d("Tracing Request", "Writing to DataOutputStream");
        out.write(body[i]);
    }
    out.close();

我所做的只是在这里实现out.write(body);方法中的代码,但添加if条件以检查请求是否已被取消,然后突破循环以停止发送请求。