java-取消中止中断spring-android resttemplate请求

java-取消中止中断spring-android resttemplate请求,第1张

概述我在专用于执行springandroid请求的线程中使用springandroid.我无法实现终止从Springandroid(例如getForObject)启动的请求.我试过了:>到达基础输入流以关闭,但已完全包装在springandroidrestemplate中,无法从外部访问>中断线程>获取其余模板的请求工厂并调用destroy>获得

我在专用于执行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请求所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1075250.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存