为 Android 创建 HttpResponse 超时 [重复]

Posted

技术标签:

【中文标题】为 Android 创建 HttpResponse 超时 [重复]【英文标题】:Creating an HttpResponse timeout for Android [duplicate] 【发布时间】:2015-08-24 23:34:37 【问题描述】:

您好,我以前从未使用过 HttpResponses,鉴于用户与网络断开连接,我希望能够在 3 分钟后断开与网络的连接。有没有完整的代码,我可以看到这样的东西?

【问题讨论】:

【参考方案1】:

我知道两种可能的方法:

    最简单的方法,使用DefaultHttpClient,已经在isma3l中解释过推荐link:

类似这样的:

private DefaultHttpClient httpClient;
// set connection timeout to 1 second
HttpConnectionParams.setConnectionTimeout(httpParameters, 1000);
// set socket timeout to 1 second
HttpConnectionParams.setSoTimeout(httpParameters, 1000);
httpClient = new DefaultHttpClient(httpParameters);
/* === and then, use your httpClient to perform your operations... === */
    硬核方式:手动处理与线程/处理程序的连接,方法是调用另一个线程中的 Http 操作,使用处理程序接收其回调。在处理程序中,您调用一个 postDelayed 方法作为参数传递一个 Runnable 来处理超时。

类似这样的:

// create a handler to load content
private final Runnable loadContent = new Runnable() 
    @Override
    public void run() 
        /* === CALL HTTP AND PROCESS IT HERE === */
        // remove the timeout runnable after receiving http response
        handler.removeCallbacks(timeoutRunnable);
    

// create a handler to handle timeout
private final Runnable timeoutRunnable = new Runnable() 
    @Override
    public void run() 
        handler.sendEmptyMessage(1);
    
;
// create a handler to handle the connection
private final Handler handler = new Handler() 
    @Override
    public void handleMessage(Message msg) 
        switch (msg.what) 
            case 1: // timeout
                handler.removeCallbacks(timeoutRunnable);
                break;
            /* === OTHER MESSAGES TO HANDLE OTHER SITUATIONS === */
        
    
;
// call the connection inside a new thread
private void createNewLoader() 
    // create a delayed runnable with a timeout of 1 second
    handler.postDelayed(timeoutRunnable, 1000);
    // call the content loader
    new Thread(loadContent).start();

希望对你有帮助。

【讨论】:

【参考方案2】:

不要使用DefaultHttpClient,Google 已弃用它,停止支持它,并建议使用更快的URLConnection。超时处理如下:

// Prepare connection
URL url = new URL(sUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(TIMEOUT);
conn.setReadTimeout(TIMEOUT);

【讨论】:

以上是关于为 Android 创建 HttpResponse 超时 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Android JSON HttpClient 使用 HttpResponse 将数据发送到 PHP 服务器

模拟 WLResponse 为 HttpResponse 抛出 ClassNotFoundException

Android 已弃用 apache 模块(HttpClient、HttpResponse 等)

解析 Android HttpResponse 缓存更新?

Android HttpResponse响应代码[重复]

Android从 HttpResponse (或者InputStream) 获取字符串内容的代码