为 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