java-取消/中止/中断spring-android resttemplate请求
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-取消/中止/中断spring-android resttemplate请求,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2116字,纯文字阅读大概需要4分钟。
内容图文
我在专用于执行spring android请求的线程中使用spring android.
我无法实现终止从Spring android(例如getForObject)启动的请求.
我试过了 :
>到达基础输入流以关闭,但已完全包装在springandroid restemplate中,无法从外部访问
>中断线程
>获取其余模板的请求工厂并调用destroy
>获得工厂的连接管理器并致电关机
>更改其余模板工厂的http客户端
>更改其余模板工厂的请求工厂
但我无法中止请求并快速发送新请求.第一个必须达到其超时.
我如何“杀死”一个春季android请求以获得稳定的rest模板以发送新请求?
提前致谢.
解决方法:
我建议使用ResponseExtractor.
您可以调用RestTemplate的execute方法,如下所示.
File file = (File) restTemplate.execute(rootUrl.concat("/vocasets/{vocasetId}/{version}"), HttpMethod.GET, requestCallabck,
responseExtractor, uriVariables);
ResponseExtractor具有extractData方法.您可以通过响应的getBody()从extractData方法获取主体输入流.
扩展ResponseExtractor以取消您的请求.
祝好运.
就我而言,我使用了侦听器方式.
static class FileResponseExtractor implements ResponseExtractor<File> {
...
public void setListener(ReceivingListener listener) {
this.listener = listener;
}
@Override
public File extractData(ClientHttpResponse response) throws IOException {
InputStream is = response.getBody();
long contentLength = response.getHeaders().getContentLength();
long availableSpace = AvailableSpaceHandler.getExternalAvailableSpaceInMB();
long availableBytes = AvailableSpaceHandler.getExternalAvailableSpaceInBytes();
Log.d(TAG, "available space: " + availableSpace + " MB");
long spareSize = 1024 * 1024 * 100;
if(availableBytes < contentLength + spareSize) {
throw new NotEnoughWritableMemoryException(availableSpace);
}
File f = new File(temporaryFileName);
if (f.exists())
f.delete();
f.createNewFile();
OutputStream o = new FileOutputStream(f);
listener.onStart(contentLength, null);
boolean cancel = false;
try {
byte buf[] = new byte[bufferSize];
int len;
long sum = 0;
while ((len = is.read(buf)) > 0) {
o.write(buf, 0, len);
sum += len;
listener.onReceiving(sum, len, null);
cancel = !listener.onContinue();
if(cancel) {
Log.d(TAG, "Cancelled!!!");
throw new CancellationException();
}
}
} finally {
o.close();
is.close();
listener.onFinish(null);
if(cancel) {
f.delete();
}
}
return f;
}
}
内容总结
以上是互联网集市为您收集整理的java-取消/中止/中断spring-android resttemplate请求全部内容,希望文章能够帮你解决java-取消/中止/中断spring-android resttemplate请求所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。