Android 上的 Http 连接超时不起作用[重复]

2024-03-11

我正在编写一个连接到网络服务的应用程序,如果无法获得连接,我不希望它等待太久。因此我设置了httpparams的connectionTimeout。但似乎并没有任何效果。

为了进行测试,我暂时关闭了 WLAN。应用程序尝试连接相当长一段时间(远远超过我想要的 3 秒),然后抛出 UnknownHostException。

这是我的代码:

try{
    HttpClient httpclient = new DefaultHttpClient();
    HttpParams params = httpclient.getParams();
    HttpConnectionParams.setConnectionTimeout(params, 3000);
    HttpConnectionParams.setSoTimeout(params, 3000);

    httppost = new HttpPost(URL);
    StringEntity se = new StringEntity(envelope,HTTP.UTF_8);
    httppost.setEntity(se);
    //Code stops here until UnknownHostException is thrown.
    BasicHttpResponse httpResponse = (BasicHttpResponse) httpclient.execute(httppost);

    HttpEntity entity = httpResponse.getEntity();
    return entity;

}catch (Exception e){
    e.printStackTrace();
}

有人知道我错过了什么吗?


使用标记的解决方案,30 多秒后我仍然收到 UnknownHostException。在这种情况下,设备已连接到 WiFi 路由器,但无法访问互联网。

采取的方法是启动一个仅尝试解析主机名的 AsyncTask。阻塞调用每 250 毫秒检查一次以查看是否成功,4 秒后它将取消任务并返回。

这就是我为解决这个问题所做的:

private boolean dnsOkay = false;
private static final int DNS_SLEEP_WAIT = 250;
private synchronized boolean resolveDns(){

    RemoteDnsCheck check = new RemoteDnsCheck();
    check.execute();
    try {
        int timeSlept = 0;
        while(!dnsOkay && timeSlept<4000){
            //Log.d("RemoteDnsCheck", "sleeping");
            Thread.sleep(DNS_SLEEP_WAIT);
            timeSlept+=DNS_SLEEP_WAIT;
            //Log.d("RemoteDnsCheck", "slept");
        }
    } catch (InterruptedException e) {

    }

    if(!dnsOkay){
        Log.d("resolveDns", "cancelling");
        check.cancel(true);
        Log.d("resolveDns", "cancelled");
    }
    return dnsOkay;
}

private class RemoteDnsCheck extends AsyncTask<Void, Void, Void>{

    @Override
    protected Void doInBackground(Void... params) {
        try {
            Log.d("RemoteDnsCheck", "starting");
            dnsOkay = false;
            InetAddress addr = InetAddress.getByName(baseServiceURL);
            if(addr!=null){
                Log.d("RemoteDnsCheck", "got addr");
                dnsOkay = true;
            }
        } catch (UnknownHostException e) {
            Log.d("RemoteDnsCheck", "UnknownHostException");
        }
        return null;
    }

}

然后,任何时候我想要进行网络调用,都会在函数的开头调用:

    if(!resolveDns()){
        return null;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 上的 Http 连接超时不起作用[重复] 的相关文章

  • 如何重试已消耗的 Observable?

    我正在尝试重新执行失败的已定义可观察对象 一起使用 Retrofit2 和 RxJava2 我想在单击按钮时重试特定请求及其订阅和行为 那可能吗 service excecuteLoginService url tokenModel Ret
  • 编写每个处理程序中间件

    我希望从处理程序中提取一些重复的逻辑 并将其放入一些每个处理程序的中间件中 特别是 CSRF 检查 检查现有会话值 即身份验证或预览页面 等 我读了关于此的几篇文章 http justinas org writing http middle
  • Sqlite数据库生命周期?关闭应用程序后它会被删除吗?

    我正在遵循一个简单的教程 该教程创建一个从 SQLiteOpenHelper 扩展的类 并创建一个包含一个表和 5 行的数据库 好的 但我需要更多地了解 android Sqlite 数据库 例如 如果应用程序关闭或手机关机会发生什么 数据
  • 在 ViewPager Fragments 中使用 Master/Detail 模板(下载链接)

    工作代码 https github com lukeallison ViewPagerMasterDetail https github com lukeallison ViewPagerMasterDetail Android 主 详细流
  • 如何使用 Ruby on Rails 3 检查 HTTP 请求的“Content-Length”字段?

    我正在使用 Ruby on Rails 3 在我的视图文件中我有以下代码 为了避免服务器过载 我会在服务器接收上传文件之前检查上传文件的大小 这是因为 按下表单的提交按钮 服务器会先完整接收文件 然后再检查文件 我知道一个HTTP 请求有标
  • 当文本输入聚焦在 React Native for Android 的底部工作表上时,视图移出屏幕

    我正在使用图书馆 https github com osdnk react native reanimated bottom sheet https github com osdnk react native reanimated bott
  • Android 中 Kotlin 协程的正确使用方式

    我正在尝试使用异步更新适配器内的列表 我可以看到有太多的样板 这是使用 Kotlin 协程的正确方法吗 这个可以进一步优化吗 fun loadListOfMediaInAsync async CommonPool try Long runn
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 如何使用 Cordova 获取当前安装的应用程序的版本?

    我已经找到了应用程序可用性插件 https github com ohh2ahh AppAvailability它主要检查用户是否在其设备上安装了某个应用程序 是否有可能获得应用程序的当前版本 开发者名称 重要 以及所有可能的信息 一般来说
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 我想实现下面的布局,按钮应该在屏幕底部,当惰性列被填充时,按钮不应该出去

    顶部有惰性列 惰性列下方有输入电话号码布局并从电话簿布局添加联系人 我希望当未添加联系人时此布局位于顶部 当我添加大量联系人时输入电话号码并添加电话簿布局中的联系人会随着惰性列滚动并移出屏幕 我不让他们走出屏幕 当接触较多时 它们必须粘在底
  • 尝试在 ubuntu 中编译 android 内核时出错

    我正在尝试从源代码编译 Android 内核 并且我已经下载了所有正确的软件包来执行此操作 但由于某种原因我收到此错误 arm linux androideabi gcc error unrecognized command line op
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • Android访问远程SQL数据库

    我可以直接从 Android 程序访问远程 SQL 数据库 在网络服务器上 吗 即简单地打开包含所有必需参数的连接 然后执行 SQL 查询 这是一个私人程序 不对公众开放 仅在指定的手机上可用 因此我不担心第三方获得数据库访问权限 如果是这
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 如何根据 gradle 风格设置变量

    我想传递一个变量test我为每种风格设置了不同的值作为 NDK 的定义 但出于某种原因 他总是忽略了最后味道的价值 这是 build gradle apply plugin com android library def test andr
  • Android:膨胀布局时出现 StackOverFlowError 和 InvokingTargetException

    首先 对不起我的英语 我在膨胀布局时有一个问题 我有一个自定义视图 从 LinearLayout 扩展而来 称为按钮帮助 我在名为的布局上使用该视图加载活动 我的以下代码在所有设备和模拟器上都能完美运行 但具有 QVGA 屏幕 例如 Sam
  • 如何确定对手机号码的呼叫是本地呼叫还是 STD 或 ISD

    我正在为 Android 开发某种应用程序 但不知道如何获取被叫号码是本地或 STD 的号码的数据 即手机号码检查器等应用程序从哪里获取数据 注意 我说的是手机号码 而不是固定电话 固定电话号码 你得到的数字是字符串类型 因此 您可以获取号
  • android sdk 的位置尚未在 Windows 操作系统的首选项中设置

    在 Eclipse 上 我转到 windows gt Android SDK 和 AVD Manager 然后弹出此消息 Android sdk 的位置尚未在首选项中设置 进入首选项 在侧边栏找到 Android 然后会出现一个 SDK 位

随机推荐

  • 父线程终止时子线程是否退出

    我正在 Visual Studio C 中使用调用 beginthreadex endthreadex 进行一些多线程编程 我创建了一个子线程thread1 子线程在一个永远不会退出的函数上运行 因为它有一个无限循环 现在 如果父线程因错误
  • 从 Symfony2 和 Doctrine2 定义和使用 ENUM 类型的正确方法

    我在我的一张表中使用 ENUM 类型 但 Doctrine 不太喜欢它 所以我做了研究并发现了这个topic https stackoverflow com questions 8750724 what do you use instead
  • Azure - 服务端点和专用端点之间的简单区别

    我无法清楚地理解服务端点和专用端点之间的区别 需要帮助 最好有一个例子 您可能已经在私人链接常见问题解答 https learn microsoft com en us azure private link private link faq
  • 如何在2013 SQL Server数据库项目中创建登录用户

    我正在尝试创建一个具有 SSDT 数据库项目登录名的用户 该登录名已存在于目标服务器上 使用以下 SQL CREATE USER MyLogin FOR LOGIN MyLogin WITH DEFAULT SCHEMA dbo GO 我收
  • Angular 应用程序中的语法错误:意外的标记 <

    我有一个 Angular 应用程序 它可以在我的本地和生产环境中完美运行 经过微小的更改后 我在本地运行了该应用程序并且运行良好 然后我构建了该项目并复制了dist文件夹到 Web 服务器 问题是当我尝试访问该应用程序时 我在 Chrome
  • ASP.NET MVC - 单元测试重写初始化方法

    我有一个如下所示的抽象类 它被所有其他控制器继承 是否有可能测试这个方法 顺便说一句 我正在尝试使用最小起订量 但没有运气 如果您能帮助我 我将不胜感激 public abstract class ApplicationController
  • 为什么 Entity Framework 在直接 select 语句中执行速度比 Dapper 快

    我是使用 ORM 处理数据库的新手 目前我正在制作一个新项目 我必须决定是使用 Entity Framework 还是 Dapper 我读过很多文章 都说 Dapper 比实体框架更快 因此 我制作了 2 个简单的原型项目 一个使用 Dap
  • 如何从 Web 模块使用 @WebServiceRef 注入 EJB

    我有一个 JEE6 应用程序 带有一个 ejb 和一个 Web 模块 在 GlassFish 3 1 1 上运行 现在我想通过将 WebService JAX WS 作为会话 Bean 注入到多个托管 Bean 中来访问它 Stateles
  • 当鼠标悬停在 UWP 按钮上时,按钮会改变颜色

    我正在尝试创建一个 UWP 按钮 当鼠标指针悬停在其上时 该按钮将更改背景颜色 我遇到的麻烦是 默认情况下 它似乎已经做到了这一点 但不是我想要的颜色 当我将鼠标悬停在红色按钮上时 它会变成默认的灰色 然后当我将鼠标移开时又会变回灰色 我用
  • 如何在不使用鼠标的情况下执行虚拟鼠标单击C# [重复]

    这个问题在这里已经有答案了 我想在 Windows 应用程序中执行单击 而不使用真正的鼠标 这样我可以将其最小化 很像机器人的行为 我该怎么做 我认为你正在寻找的功能是PostMessage DllImport user32 dll Set
  • GitLab Runner - 如何一次只允许一个管道运行

    我是 GitLab 新手 面临一个问题 如果我在同一个 gitlab runner 上同时触发两个管道 它们都会并行运行并导致失败 我想要的是将运行限制为一次只运行一个管道 而其他管道则在队列中运行 我已经设置了concurrent 1在
  • 无法向 Google App 脚本授予授权或许可

    为什么我无法向我使用同一 Google 帐户创建的 Google Apps 脚本授予许可 授权 看来 Google 不相信自己能够将自己的 Google Apps 脚本与自己的电子表格一起使用 这是破坏一切的代码行 如果此行不存在 则不会请
  • Android 应用程序将数据发送到 PHP 脚本 - 预期失败

    我尝试开发一个需要将数据发送到 MySql 数据库的应用程序 为了实现它 我创建了一个 httppost 如下所示 public void postData try Create a new HttpClient and Post Head
  • 如何将 C# 程序集资源嵌入到同一个程序集中?

    我已将不同文化的资源添加到我的班级图书馆项目中 构建时 会为每种区域性创建单独的文件夹 每个文件夹中都有一个程序集 有没有办法将所有资源嵌入类库程序集中 而不是为每种文化提供额外的程序集 该类库最终会在另一个项目中使用 因此对于这些单独的文
  • ASP.NET 虚拟路径在哪里解析波形符“~”?

    ASP NET 虚拟路径在哪里解析波浪号 在链接中 例如 它是否重定向 或者RedirectToAction在 ASP NET MVC 中 它从这里获取 VirtualPathUtility ToAbsolute contentPath h
  • 应用程序中所有函数调用的列表

    我们如何列出应用程序中调用的所有函数 我尝试使用 GDB 但它的回溯列表仅到主函数调用 我需要更深入的列表 即主函数调用的所有函数以及从这些被调用函数调用的函数的列表 等等 有没有办法在 gdb 中得到这个 或者你能给我一些关于如何获得这个
  • 基于 socketserver 的 Python 3 服务器关闭挂起

    我正在使用 Python 3 中的线程 SocketServer 开发一个 简单 服务器 我在实施时遇到了很多麻烦shutdown为了这 我在互联网上找到的下面的代码最初可以工作 但在通过 telnet 从客户端发送一些命令后停止工作 一些
  • Hibernate、Spring、@Transactional - 用 try/catch 包围?

    我正在使用 Spring 3 和 Hibernate 3 6 开发 Web 应用程序 我有一些问题要问 Transactional注释和代码结构 gt 当我使用 Transactional 使用 Spring 进行事务管理 我是否必须围绕
  • 计算两行之间的时间差

    我有一个包含以下内容的表 DataDate Value 2010 03 01 08 31 32 000 100 2010 03 01 08 31 40 000 110 2010 03 01 08 31 42 000 95 2010 03 0
  • Android 上的 Http 连接超时不起作用[重复]

    这个问题在这里已经有答案了 我正在编写一个连接到网络服务的应用程序 如果无法获得连接 我不希望它等待太久 因此我设置了httpparams的connectionTimeout 但似乎并没有任何效果 为了进行测试 我暂时关闭了 WLAN 应用