中断HttpURLConnection请求Android

1daemon1

我正在创建简单的类,该类使用HttpURLConnection将请求发送到服务器并接收响应。我想添加一个中断当前请求的interrupt()方法(想象中的请求正在AsyncTask中运行,并且从主线程调用interrupt())。有2个过程需要很多时间,我不知道如何打断它们:

  • 写入输出流
  • 从输入流中读取

假设我想例如中断从我这样读取的输入流中的读取:

downloadThread = new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            buffer = readFully(connection.getInputStream());
        } catch( Exception e ) {
            e.printStackTrace();
        }
    }
});
downloadThread.start();

而readFully()方法是:

public byte[] readFully(InputStream input) throws IOException {
    byte[] buffer = new byte[8192];
    int bytesRead;
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    while ((bytesRead = input.read(buffer)) != -1) {
        output.write(buffer, 0, bytesRead);
    }
    return output.toByteArray();
}

如何停止从输入流中读取(换句话说,下载)?Thread的stop()方法已被弃用,无法使用。我到处应该定期检查是否应该停止线程并手动停止线程。但是,当我全神贯注于这一行时,我该怎么做(如果我理解得很好):

connection.getInputStream()

我认为这是同一种问题,但尚未得到答案(请参阅解决方案的注释):如何在Android上停止HttpURLConnection连接请不要将我引向某些REST库。我真的很想知道如何处理这个问题。谢谢 ;)。

马蒂阿什

connection.getInputStream() 与服务器建立连接后,客户端将准备开始流式传输响应时将返回。

因此,这取决于连接:例如,如果要下载大文件,则在readFully()流式传输方法时,应将大部分时间(几乎所有时间)都花在方法内部,而如果响应非常短,readFully()则将非常有用小。

在第一种情况下,最简单的“中断”方法是设置一个布尔标志,并在循环内对其进行检查。

while ((bytesRead = input.read(buffer)) != -1)
{
    if (cancelled)
        return null;

    output.write(buffer, 0, bytesRead);
}

isCancelled()如果要在的AsyncTasks中实现此“布尔标志” doInBackground()(推荐),可以使用该方法

在第二种情况下,除了直接杀死线程(根本不建议)以外,您无能为力。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android HttpURLConnection,仅加载第一个4066符号,并中断请求

来自分类Dev

使用HttpURLConnection的Android POST请求

来自分类Dev

Android的HttpURLConnection在HEAD请求上引发EOFException

来自分类Dev

带有图片/ jpeg的Android HttpURLConnection POST请求

来自分类Dev

Android:HttpUrlConnection使用POST发送请求正文(而不是GET)

来自分类Dev

Android:HttpUrlConnection使用POST发送请求正文(而不是GET)

来自分类Dev

Java HttpURLConnection VS Android HttpURLConnection

来自分类Dev

Java HttpURLConnection VS Android HttpURLConnection

来自分类Dev

btw中断和中断请求的区别

来自分类Dev

Android:HttpURLConnection引发EOFException

来自分类Dev

Android HttpUrlConnection EOFException

来自分类Dev

HttpURLConnection和JSON Android

来自分类Dev

Android HttpURLConnection连接超时

来自分类Dev

Android HttpURLConnection发送参数

来自分类Dev

Android中的HttpURLConnection

来自分类Dev

Android HttpURLConnection连接超时

来自分类Dev

Android HttpURLConnection setRequestMethod PUT

来自分类Dev

客户请求在Heroku中中断

来自分类Dev

Spring MVC请求中断的钩子

来自分类Dev

使用HttpURLConnection提交JSON POST请求

来自分类Dev

在HttpURLConnection中发送PUT,DELETE HTTP请求

来自分类Dev

获取错误请求的正文httpURLConnection.getInputStream()

来自分类Dev

通过代理通过HttpUrlConnection发布请求

来自分类Dev

维护多个HttpURLConnection请求的登录令牌

来自分类Dev

HttpURLConnection POST返回400错误请求

来自分类Dev

带有 HttpUrlConnection 的 PUT 请求 (JAVA)

来自分类Dev

Android HttpUrlConnection设置POST方法

来自分类Dev

Android HttpURLConnection写帖子数据

来自分类Dev

Android上的HTTPPost与HttpUrlConnection POST

Related 相关文章

热门标签

归档