簡體   English   中英

HttpURLConnection,打開/關閉WiFi並嘗試連接時出現問題

[英]HttpURLConnection, problem turning on/off WiFi and trying to connect

我有一個應用程序,它是RESTful API使用者,我希望與API的連接超時。

經過搜索和測試,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()之后再調用endRequest()

有什么想法嗎?

在嘗試訪問網絡之前,應檢查網絡連接是否可用。 看看這個問題:

特別:

NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnected()) {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM