HttpURLConnection,打开/关闭WiFi并尝试连接的问题
问题描述:
我有一个应用程序是一个RESTful API使用者,我希望在与API的连接上有一个超时。HttpURLConnection,打开/关闭WiFi并尝试连接的问题
正如我已经搜索并测试,HttpURLConnection.setReadTimeout()方法不起作用,所以我找到的解决方案是使用AsyncTask,它将尝试连接到服务器,然后将超时AsyncTask.get()。
它有效,部分。问题是当我做到以下几点:
- 进入应用程序打开WiFi。我点击“登录”按钮并获得“无效/用户密码”。好。
- 关闭WiFi,点击“登录”按钮。该应用程序尝试连接,但5秒后(我选择了超时),它显示通知对话框说我没有连接。好吧,一切都如预期。
- 打开WiFi,点击“登录”按钮。它仍然工作,就好像我没有连接,总是显示对话框。我可以等待很多秒,但行为与如果我断开连接相同。
我调试了我的所有代码,一步一步地使用Eclipse,没有什么错误的逻辑。 我的HttpURLConnection总是一个新的对象,所以我没有试图使用相同的连接对象连接WiFi后打开回来...... 另外我使用Scribe库,为OAuth,但我检查了源代码和一切似乎没问题,只是我改变了创建连接的方法,以便始终使用新的实例。
我开始认为Android是“缓存”我的连接对象或对象的AsyncTask ...
下面我RequestManager类的一些代码:该方法
public class RequestManager {
private static RequestManager self = new RequestManager();
private Request currentRequest;
private static final long TIMEOUT = 5000;
public static RequestManager getInstance() {
return self;
}
public void startRequest(Request request) {
if (currentRequest != null) return;
currentRequest = request;
}
public String getResponse() throws ConnectionErrorException {
RequestThreat rt = new RequestThread();
rt.execute(currentRequest);
try {
return (String) rt.get(TIMEOUT, TimeUnit.MILISECONDS);
} catch (InterruptedException e) {
} catch (ExecutionException e) {
} catch (TimeoutException e) {
throw new ConnectionErrorException();
} finally {
endRequest();
}
return null;
}
public void endRequest() {
currentRequest = null;
}
private class RequestThread extends AsyncTask<Request, Integer, String> {
@Override
protected String doInBackground(Request... requestParams) {
return requestParams[0].send().getBody();
}
}
}
而且我请拨打getResponse()
我打过电话endRequest()
。
有什么想法?
答
在尝试访问网络之前,您应该检查网络连接是否可用。看看这个quesion:
具体做法是:
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnected()) {
我有这个在我的代码,但去掉它,因为当我没有连接到无线网络,也没有3G,它返回真,但现在看起来好了。谢谢! – 2011-04-04 13:51:30