337 Stimmen

Festlegen der HttpResponse-Zeitüberschreitung für Android in Java

Ich habe die folgende Funktion zur Überprüfung des Verbindungsstatus erstellt:

private void checkConnectionStatus() {
    HttpClient httpClient = new DefaultHttpClient();

    try {
      String url = "http://xxx.xxx.xxx.xxx:8000/GaitLink/"
                   + strSessionString + "/ConnectionStatus";
      Log.d("phobos", "performing get " + url);
      HttpGet method = new HttpGet(new URI(url));
      HttpResponse response = httpClient.execute(method);

      if (response != null) {
        String result = getResponse(response.getEntity());
        ...

Wenn ich den Server zu Testzwecken herunterfahre, wartet die Ausführung sehr lange in der Zeile

HttpResponse response = httpClient.execute(method);

Weiß jemand, wie man die Zeitüberschreitung einstellen kann, um zu lange Wartezeiten zu vermeiden?

Danke!

3voto

androidevil Punkte 8720

Eine Option ist die Verwendung der OkHttp Kunde, von Square.

Hinzufügen der Bibliotheksabhängigkeit

Fügen Sie in der build.gradle diese Zeile ein:

compile 'com.squareup.okhttp:okhttp:x.x.x'

Wo x.x.x ist die gewünschte Bibliotheksversion.

Den Client einstellen

Wenn Sie z. B. eine Zeitüberschreitung von 60 Sekunden einstellen möchten, gehen Sie folgendermaßen vor:

final OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setReadTimeout(60, TimeUnit.SECONDS);
okHttpClient.setConnectTimeout(60, TimeUnit.SECONDS);

ps: Wenn Ihre minSdkVersion größer als 8 ist, können Sie TimeUnit.MINUTES . Sie können also einfach verwenden:

okHttpClient.setReadTimeout(1, TimeUnit.MINUTES);
okHttpClient.setConnectTimeout(1, TimeUnit.MINUTES);

Weitere Einzelheiten zu den Einheiten finden Sie unter ZeitEinheit .

1voto

Sandeep Punkte 666
HttpParams httpParameters = new BasicHttpParams();
            HttpProtocolParams.setVersion(httpParameters, HttpVersion.HTTP_1_1);
            HttpProtocolParams.setContentCharset(httpParameters,
                    HTTP.DEFAULT_CONTENT_CHARSET);
            HttpProtocolParams.setUseExpectContinue(httpParameters, true);

            // Set the timeout in milliseconds until a connection is
            // established.
            // The default value is zero, that means the timeout is not used.
            int timeoutConnection = 35 * 1000;
            HttpConnectionParams.setConnectionTimeout(httpParameters,
                    timeoutConnection);
            // Set the default socket timeout (SO_TIMEOUT)
            // in milliseconds which is the timeout for waiting for data.
            int timeoutSocket = 30 * 1000;
            HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

1voto

Bruno Peres Punkte 2533

Wenn Sie die HttpURLConnection anrufen setConnectTimeout() wie beschrieben aquí :

URL url = new URL(myurl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(CONNECT_TIMEOUT);

1voto

foxundermon Punkte 540

Sie können HttpClient-Instanz durch die Art und Weise mit Httpclient-Android-4.3.5 erstellen, kann es gut funktionieren.

 SSLContext sslContext = SSLContexts.createSystemDefault();
        SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                sslContext,
                SSLConnectionSocketFactory.STRICT_HOSTNAME_VERIFIER);
                RequestConfig.Builder requestConfigBuilder = RequestConfig.custom().setCircularRedirectsAllowed(false).setConnectionRequestTimeout(30*1000).setConnectTimeout(30 * 1000).setMaxRedirects(10).setSocketTimeout(60 * 1000);
        CloseableHttpClient hc = HttpClients.custom().setSSLSocketFactory(sslsf).setDefaultRequestConfig(requestConfigBuilder.build()).build();

0voto

Eco4ndly Punkte 495
public boolean isInternetWorking(){
    try {
        int timeOut = 5000;
        Socket socket = new Socket();
        SocketAddress socketAddress = new InetSocketAddress("8.8.8.8",53);
        socket.connect(socketAddress,timeOut);
        socket.close();
        return true;
    } catch (IOException e) {
        //silent
    }
    return false;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X