我想完全阻止凌空请求发送数据,调用mRequestQueue.cancelAll(TAG)
方法只是停止响应返回响应处理程序,但发送数据进程仍然在后台工作,我发送一个大的byte []文件,所以一旦用户取消发送过程,我想中断请求并停止发送数据。
任何人都可以想到解决这个问题的解决方法吗?
答案 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条件以检查请求是否已被取消,然后突破循环以停止发送请求。