Android: AndroidHttpClient - как установить время ожидания? - PullRequest
7 голосов
/ 20 апреля 2011

Я следовал инструкциям ответа kuester2000 , но мои настройки тайм-аута не работают.

try
{
    int timeout = 3000;
    URL myURL = //some valid URL

    AndroidHttpClient = AndroidHttpClient.newInstance("name");
    HttpGet httpGet = new HttpGet(myURL.toExternalForm());

    HttpParams httpParams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(httpParams, timeout);
    HttpConnectionParams.setSoTimeout(httpParams, timeout);

    HttpResponse response = httpClient.execute(httpGet);

    //...
}
catch (SocketTimeoutException e)
{
    e.printStackTrace();
}
catch (ConnectTimeoutException e)
{
    e.printStackTrace();
}
catch (IOException e)
{
    e.printStackTrace();
}
//...

Однако значение тайм-аута ничего не меняет.

В ответе, который я связал, также сказано:

Время ожидания подключения выдает "java.net.SocketTimeoutException: сокет не подключен", а время ожидания сокета "java.net.SocketTimeoutException: истекло время ожидания операции".

Но я не получаю ни того, ни другого. Вместо этого я получаю «org.apache.http.conn.ConnectTimeoutException: подключиться к ... тайм-аут»

так кто-нибудь может мне помочь? где ошибка?

Ответы [ 5 ]

9 голосов
/ 20 апреля 2011

Вы не используете параметры httpParams, они должны быть предоставлены HTTPClient. Так что это не сработает. В ответе, который вы указали, порядок правильный! Попробуйте следующий порядок: сначала создайте параметры и передайте их HTTPClient.

HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 5000);
HttpConnectionParams.setSoTimeout(httpParameters, 10000);

HttpClient client = new DefaultHttpClient(httpParameters);
HttpGet request = new HttpGet(url);

HttpResponse response = client.execute(request);
6 голосов
/ 21 апреля 2011

Я не смог пропустить присоединение параметров к моему http-запросу, но в моем примере правильный способ сделать это -

httpGet.setParams(httpParams);

перед вызовом httpClient.execute (httpGet).

Просто добавил эту строку, и она отлично работала.

5 голосов
/ 29 августа 2012

Другой вариант для установки на самом клиенте:

AndroidHttpClient client = AndroidHttpClient.newInstance("Client V/1.0");
HttpConnectionParams.setConnectionTimeout(this.client.getParams(), 3000);
HttpConnectionParams.setSoTimeout(this.client.getParams(), 5000);

Это должно привести к тому, что эти конкретные параметры будут установлены ...

НТН

0 голосов
/ 15 января 2015

После прочтения, вот как я это сделал, используя параметры прямо из клиента по умолчанию:

HttpClient client = new DefaultHttpClient();
HttpParams params = client.getParams();
HttpConnectionParams.setConnectionTimeout(params, 3000);
HttpConnectionParams.setSoTimeout(params, 3000);

Оригинальный кредит переходит к http://www.jayway.com/2009/03/17/configuring-timeout-with-apache-httpclient-40/

0 голосов
/ 01 апреля 2013
            try {
                HttpGet httpGet = new HttpGet("your_uri/test.json");

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

                HttpClient httpclient = new DefaultHttpClient();

                httpGet.setParams(httpParameters);

                HttpResponse response = httpclient.execute(httpGet);

                HttpEntity entity = response.getEntity();

                BufferedReader br = null;

                if(entity != null) {
                    Log.i("read", "nube");

                    br = new BufferedReader(new InputStreamReader(entity.getContent()));

                } else {
                    Log.i("read", "local");

                    AssetManager am = getApplicationContext().getAssets();
                    InputStream is = am.open("test.json");

                    br = new BufferedReader(new InputStreamReader(is));
                }

                String line;
                String texto = "";

                while ((line = br.readLine()) != null) {
                    texto += line;
                }


            } catch (IOException e) {
                e.printStackTrace();
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...