Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >如何使HttpURLConnection setConnectTimeout在安卓系统下工作?

如何使HttpURLConnection setConnectTimeout在安卓系统下工作?
EN

Stack Overflow用户
提问于 2017-09-24 21:18:47
回答 1查看 841关注 0票数 0

在从远程web资源读取文本和二进制内容时,我使用HttpURLConnection建立连接。

我需要实现考虑到可能存在的问题的方法

  • 连接到远程web资源和
  • 在内容从远程web资源下载期间。

有两个设置器( setConnectTimeout()setReadTimeout() of URLConnection类)用于这些目的。

当我在控制台上运行这两个设置器的实现的代码时,一切都很好。

由于我的防火墙关闭了81个端口,所以我使用URL规范作为"www.google.com:81“来模拟我的计算机上的连接超时问题。

异常按预期在10秒后引发,并显示在我的控制台中。

然后,我通过警告用户与远程web资源的连接可能出现的问题来处理此异常。

但是,当我在Android平台下使用超时设置器调用相同的方法时,超时异常不会在10秒后引发。

我已经搜索了所有的StackOverflow,并找到了类似问题的描述,在安卓下使用超时。

但是,给出的任何答案都不能说明问题的具体决定。

有人能指出确切的解决方案吗?如何使setConnectTimeout()setReadTimeout()设置器在Android下工作,就像这些代码行所期望的那样?

代码语言:javascript
代码运行次数:0
复制
package com.downloader;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class WebDownloader
{
  public static String StringFileContent;
  public static boolean StringFileIsDownloaded;
  public static byte[] BinaryFileContent;
  public static boolean BinaryFileIsDownloaded;

  public static void readStringFileContent(String urlString)
  {
    StringFileContent = "";
    StringFileIsDownloaded = false;
    try
    {
      URL Url = new URL(urlString);
      HttpURLConnection connection = (HttpURLConnection)Url.openConnection();
      connection.setConnectTimeout(10000);
      connection.setReadTimeout(10000);

      connection.setRequestMethod("GET");
      connection.connect();

      InputStream inputStream = connection.getInputStream();
      InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
      BufferedReader in = new BufferedReader(inputStreamReader);

      StringBuilder response = new StringBuilder();
      String inputLine;
      while ((inputLine = in.readLine()) != null)
      {
        response.append(inputLine);
      }
      in.close();

      StringFileContent = response.toString();
      StringFileIsDownloaded = true;
    }
    catch (Exception localException) 
    {
        System.out.println("Exception: " + localException.getMessage());
    }
  }

  public static void readBinaryFileContent(String urlString)
  {
    BinaryFileContent = new byte[0];
    BinaryFileIsDownloaded = false;
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    try
    {
      URL Url = new URL(urlString);
      HttpURLConnection connection = (HttpURLConnection)Url.openConnection();
      connection.setConnectTimeout(10000);
      connection.setReadTimeout(10000);      

      connection.setRequestMethod("GET");
      connection.connect();

      InputStream inputStream = connection.getInputStream();

      byte[] chunk = new byte['?'];
      int bytesRead;
      while ((bytesRead = inputStream.read(chunk)) > 0)
      {
        outputStream.write(chunk, 0, bytesRead);
      }
      BinaryFileContent = outputStream.toByteArray();
      BinaryFileIsDownloaded = true;
    }
    catch (Exception localException) 
    {
        System.out.println("Exception: " + localException.getMessage());        
    }
  }
EN

回答 1

Stack Overflow用户

发布于 2017-09-24 21:29:09

setConnectTimeout(int超时值)如果服务器不可靠,并且您只想等待15秒,然后告诉用户“出了问题”。

setReadTimeout(SetReadTimeout)是当您有连接时,您在read()上被阻塞的超时,如果读取阻塞的时间超过超时,您希望得到一个异常

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46398049

复制
相关文章
安卓系统框架介绍(安卓常用框架)
——源码地址1: https://android.googlesource.com/
全栈程序员站长
2022/07/30
8.7K0
安卓系统框架介绍(安卓常用框架)
如何从电脑直接控制安卓手机 监控安卓手机 安卓手机如何控制安卓手机
实用方法很简单,在手机上安装这个软件,然后运行,然后进入Setting,点击User's settings,然后Create new user(我新建了一个叫做ACE的用户),注意这里在豌豆荚的截图只是做教程用的,实际不需要连接豌豆荚,甚至不需要WIFI,只要你打开了GPRS
程序员小顾
2021/12/01
16.6K0
安卓 View 的工作原理
在正式介绍 View 的三大流程之前,我们必须先介绍一些基本概念,这样才能更好地理解View的measure、layout和draw过程,本节主要介绍 ViewRoot 和 DecorView 的概念。
acc8226
2022/05/17
4490
安卓 View 的工作原理
安卓使ScrollView滚动到底部代码
scrollView.fullScroll(ScrollView.FOCUS_DOWN);滚动到底部
全栈程序员站长
2022/07/15
1.1K0
Android--SVG在安卓系统中的应用
通过使用它的Path标签,几乎可以实现SVG中的其它所有标签,虽然可能会复杂一点,但这些东西都是可以通过工具来完成的,所以,不用担心写起来会很复杂。
aruba
2020/07/03
2.8K0
2--安卓网络编程之http协议简介+小案例引入
你也可以请求一下百度的服务器,可以看出是返回了一个Html的源码,浏览器便是解析这份源码,渲染成视图展现出来的。
张风捷特烈
2018/10/18
7660
2--安卓网络编程之http协议简介+小案例引入
如何使用Kali远程控制安卓系统
一、查看Metasploit工具中可以在Android系统下使用的payload类型 可以看到有9种可以在Android下使用的payload 这些payload可以作为我们后面攻击的软件的生成工具
知识与交流
2021/04/02
6.9K1
如何使用Kali远程控制安卓系统
安卓10系统如何增加双导航栏
安卓系统默认支持一个导航栏和一个状态栏,有时客户需求双边按键或者三屏分开显示,例如左右显示按键中间为界面显示或者左边显示仪表盘中间显示导航界面右边显示车速时钟等,这种情况使用一个导航栏无法实现。
kaicer
2023/05/24
1.7K14
安卓 View 的工作流程
measure过程要分情况来看,如果只是一个原始的View,那么通过measure方法就完成了其测量过程,如果是一个ViewGroup,除了完成自己的测量过程外,还会遍历去调用所有子元素的measure方法,各个子元素再递归去执行这个流程,下面针对这两种情况分别讨论。
acc8226
2022/05/17
4350
安卓 View 的工作流程
安卓系统usb调试在哪_安卓手机的usb调试
Android手机USB调试在哪?安卓手机如何打开USB调试模式?如果我们要将安卓手机连接到电脑上,从而传输文件、下载应用或ROOT等,都需要打开手机的USB调试模式。安卓系统的版本有很多,它们的打开方法也各不相同,下面给大家介绍各版本安卓手机打开USB调试模式的方法。
全栈程序员站长
2022/09/30
3.8K0
B/S模式下如何使软件屏蔽系统热键
publicvoidHideAllFunction(Pagepage)   {   if(!
Java架构师必看
2021/03/22
5860
安卓再现系统广播高危漏洞,影响99.9%安卓手机
近日,有博客披露安卓系统存在安卓系统广播漏洞,99.9%的安卓手机将面临安全威胁。恶意程序利用该漏洞,可伪造任意内容的手机短信,及致手机死机,甚至可将手机恢复出厂设置(所有数据将被擦除)。该漏洞目前影响5.0版本以下99.9%的安卓系统手机。 安全专家研究发现,谷歌在刚刚发布的安卓系统5.0(Lolipop)中悄悄修复了一项高危漏洞,“利用该漏洞,可以发送任意广播:不仅可以发送系统保护级别的广播、还可以无视receiver的android:exported=false、android:permisson
安恒信息
2018/04/10
3.3K0
安卓再现系统广播高危漏洞,影响99.9%安卓手机
unicorn在安卓中使用
https://github.com/RikkaApps/Riru/releases
tea9
2023/03/08
9410
Android通过原生请求直接获取网页内容
书接上一回,写了一个Android通过URL文件下载及文件名提取;以其简单受到其他小伙伴的赞许。今天刚好需要写一个安卓版的
谭广健
2020/09/01
2.7K0
工作记录,使用Uniapp开发安卓应用
项目需求:录制视频和语音,在app页面的上半部分实时显示。下半部分显示文字提示,提醒用户回答确认。最后将录制的视频提交到服务器保存。
房东的狗丶
2023/02/17
6K1
工作记录,使用Uniapp开发安卓应用
安卓系统如何添加USB网络共享功能
有些客户需求添加USB网络共享功能,安卓本身是支持USB网络共享的,但需要我们配置才有。目前USB网络共享功能主要用于将车机网络共享给手机或平板使用,手机平板使用的操作系统一般也是安卓或者IOS,那我们需要添加两种配置。安卓系统USB网络共享需要驱动支持rndis host,而苹果USB网络共享需要驱动支持ipheth,可以分如下步骤添加USB网络共享功能:
kaicer
2023/07/01
1.3K0
安卓仓库管理系统源码
大等于jdk1.8,大于mysql5.5,idea(eclipse),Android Studio
淘毕设
2022/07/17
2.3K0
Mac下配置安卓开发环境
1.下载 android-sdk_r10-mac_x86 3.0.zip(原因是因为不能下载!!!所以只好下载这个,然后更新!!!需要的可以留言给我) eclipse-java-juno-SR2-macosx-cocoa.tar.gz jdk-7u17-macosx-x64.dmg 2.安装sdk目录要选好 3.配置环境变量(我实用的zsh,所以修改的是zhsrc文件,你用bashrc就修改对应文件即可!注意linux也是这样的) export PATH=${PATH}:/Users/Baipin-i
苦咖啡
2018/05/08
1.3K0
如何用python写一个安卓APP?(下)
1 正如上篇结尾所述 我手动添加了Aild文件 怎么做的呢 对于我这个安卓盲 不得不白嫖于stack overflow (ps:幸好小哥我懂点英语)
聪明的瓦肯人
2019/10/22
2.5K0
如何用python写一个安卓APP?(下)
安卓基础干货(一):了解一下安卓的发展历史
金兴 1.1G-4G的介绍 G generation 1G 大哥大 只能进行通话 不能发短信 2G wap.baidu.com 支持上网 彩信业务 3G 沃 www.baidu.com 7.2M/s 4G lte long time evolution 100M/s 主要区别 速率的不同 5G 华为 大公司卖标准 小公司卖产品 arm:并不生产处理器 10G/s 2.Android操作系统介绍 安迪鲁宾研发 3.Android历史介绍 And
緣來
2018/09/18
1.3K0

相似问题

HttpURLConnection setConnectTimeout不工作

11

HttpUrlConnection setConnectTimeout不工作吗?

12

在安卓系统中优化HttpURLConnection

12

安卓系统中的HttpURLConnection

38

安卓- HttpUrlConnection不工作

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文