![](/img/trans.png)
[英]My BroadcastReceiver is called two times when turning on/off wifi or gps?
[英]HttpURLConnection, problem turning on/off WiFi and trying to connect
我有一個應用程序,它是RESTful API使用者,我希望與API的連接超時。
經過搜索和測試,HttpURLConnection.setReadTimeout()方法不起作用,所以我找到的解決方案是使用AsyncTask,它將嘗試連接到服務器,然后將超時傳遞給AsyncTask.get。 ()。
它部分起作用。 問題是當我執行以下操作時:
我使用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()
之后再調用endRequest()
。
有什么想法嗎?
在嘗試訪問網絡之前,應檢查網絡連接是否可用。 看看這個問題:
特別:
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnected()) {
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.