java - 如何在 Android 中经过一定时间后停止 BufferedReader

标签 java android bufferedreader

我有一个线程可以打开一个将数据发送到服务器的套接字。服务器可能会根据是否有人在工作站发回数据。但是,我试图在 BufferedReader 上设置超时,以便在 30 秒后它继续说响应为空。

//Receive Response
bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
response = new StringBuilder();
while ((line = bufferedReader.readLine()) != null ) {
    response.append(line);
}

这是我的 BufferedReader,非常标准,我查看了一堆计时器和其他帖子,但没有找到可行的解决方案。

最佳答案

您可以调用 setSoTimeout()在您的套接字实例上。

Itt 将在达到超时时引发 SocketTimeoutException。将您的读取逻辑包装在一个 try-catch block 中,捕获该异常并按您的意愿进行处理。

像这样:

try {
    socket.setSoTimeout(30000);

    bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    while ((line = bufferedReader.readLine()) != null ) {
        response.append(line);
    }
} catch (SocketTimeoutException ste) {
    // timeout reached
} catch (Exception e) {
    // something else happened
} finally {
    // some general processing
}

关于java - 如何在 Android 中经过一定时间后停止 BufferedReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49379108/

相关文章:

Java eclipse - Activity 目录、属性修改#2

Android 父 Activity 历史堆栈问题

android - 如何在自己的安卓手机上安装自己在安卓市场发布的付费应用?

java - 识别文件中的每个单词

java - URL 连接上的 InputStreamReader 返回 null

java - BufferedReader 卡在最后一个输入行而没有结束程序

java - 运行 java exec 命令,总是需要应用程序的完整绝对路径?

java - jdbc 模型检测类

java - 用图标包装可执行 jar 文件

android - 我们还能从 Google Play 中删除从未发布的应用吗?