【问题标题】:Android: HttpClient parameters - Connection and Socket TimeoutAndroid:HttpClient 参数 - 连接和套接字超时
【发布时间】:2012-09-28 08:56:36
【问题描述】:

我在互联网上找不到任何有用的教程,也找不到开发者网站上的文档。

在我的应用程序中,我使用 HttpPost 连接到 Web 服务器,当没有 没有互联网 连接,但 wifi 在它上面显示白屏并且大约 10 -15 秒“UnknownHostException”。

我发现了这个异常,然后像吐司一样

Unable to connect, check your internet connection.

并关闭 Activity(或应用程序,因为我在第一个 Activity 上使用了 finish())。

wifi 本身关闭时,我会立即获得类似“干杯”的感觉

You need internet connection to use this Application

但是第一种情况很烦人。花 10-15 秒的时间,然后展示吐司。

所以我使用了 HttpParameters 并添加了一个 5 sec ConnectionTimeout 参数。

但应用程序的工作方式与以前相同(此参数无效)。

我如何跟踪我是否点击了 ConnectionTime(超过 5 秒)。这样我就可以显示一个 Toast 之类的

Slow internet connection

另外,为什么wifi开启但没有网络

时网络连接检查不起作用

这是我在启动应用程序时检查的内容:

cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

if (isOnline(cm, this, SignUpActivity.this)){
//continue
}

public static boolean isOnline(ConnectivityManager cm, Context c, Activity a) {

    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    }

    Toast.makeText(c, "You need internet access to run this application",
            Toast.LENGTH_SHORT).show();
    a.finish();
    return false;
}

我只是检查设备的 wifi 是否打开。如果是这样,我如何检查我是否有互联网连接,而不仅仅是 wifi

谢谢

【问题讨论】:

    标签: android http-post httpclient


    【解决方案1】:

    至于第一个问题,请尝试使用SocketTimeout

    至于第二个问题,一行

    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    

    仅获取 Wi-fi 状态(即手机 wifi 天线已打开),而不是实际连接。该函数立即返回,因此如果 wifi 已关闭,您无需进一步检查连接即可敬酒。但是当打开 wi-fi 时,你应该继续检查你的服务器的实际可达性,比如

    InetAddress.getByName(host).isReachable(timeOut)
    

    【讨论】:

    • 其实我也在使用 SocketTimeout。对不起,我没有在问题中提到它。至于第二个解决方案,你的意思是我只是在检查 wifi 是否打开?如果有wifi,我必须更改它,检查是否可以访问互联网?
    • 第二个。当 wi-fi 开启时,只有在这种情况下,检查您的实际服务器可达性
    • 在我的应用程序中,此代码有效:HttpParams httpParameters = new BasicHttpParams(); int timeoutConnection = serverTimeout; HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);HttpResponse response;response = httpclient.execute(httpget);
    • 我实际上遵循了这个解决方案:stackoverflow.com/questions/4238921/… 上面写着 cm.getActiveNetworkInfo();一个人就足以知道是否有互联网接入
    • 这还不够。您发布的答案说:“请注意,拥有活动的网络接口并不能保证特定的网络服务可用。网络问题、服务器停机、低信号、强制门户、内容过滤器等都会阻止您的应用程序到达服务器”
    猜你喜欢
    • 2013-05-23
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2011-02-05
    • 2018-11-26
    • 2020-06-02
    相关资源
    最近更新 更多