Android UnknownHostException: есть ли способ установить время ожидания? - PullRequest
28 голосов
/ 09 марта 2012

Когда я подключаюсь к своему веб-сервису для получения данных, телефон иногда отключается, портится DNS и т. Д. Затем я получаю UnknownHostException, что совершенно нормально.

Что я хочу сделать, это установить тайм-аут при поиске hostName здесь:

 response = httpclient.execute(httpget);

Я уже установил:

HttpConnectionParams.setConnectionTimeout(httpParameters,timeoutConnection);
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

но, похоже, они не подаются на HostLookUp. Есть ли способ установить время ожидания при поиске хоста?

Редактировать
Я только что обнаружил, что пользователь не может изменить время ожидания nslookup в этом сообщении в списке рассылки hc-dev .

Мне нужно будет вручную сгенерировать исключение тайм-аута от таймера в этой точке.

Ответы [ 12 ]

0 голосов
/ 16 июня 2013

Попробуйте это

public class MyAsync extends AsyncTask<String, Integer, String> {


@Override
protected String doInBackground(String... arg0) {
     HttpParams httpParameters = new BasicHttpParams();
        // Set the timeout in milliseconds until a connection is established.
        int timeoutConnection = 3000;
        HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
        // Set the default socket timeout (SO_TIMEOUT) 
        // in milliseconds which is the timeout for waiting for data.
        int timeoutSocket = 5000;
        HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
    HttpClient client=new DefaultHttpClient(httpParameters);
    HttpGet get=new HttpGet(arg0[0]);
    try {
        HttpResponse response=client.execute(get);
        HttpEntity ent=response.getEntity();
        String res=EntityUtils.toString(ent);
        Log.d("Nzm", res);

    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}

}

0 голосов
/ 05 ноября 2012

Вы должны использовать что-то вроде этого:

/**
 * Check availability of web service
 * 
 * @param host Address of host
 * @param seconds Timeout in seconds
 * @return Availability of host
 */
public static boolean checkIfURLExists(String host, int seconds)
{
    HttpURLConnection httpUrlConn;
    try
    {
        httpUrlConn = (HttpURLConnection) new URL(host).openConnection();

        // Set timeouts in milliseconds
        httpUrlConn.setConnectTimeout(seconds * 1000);
        httpUrlConn.setReadTimeout(seconds * 1000);

        // Print HTTP status code/message for your information.
        System.out.println("Response Code: " + httpUrlConn.getResponseCode());
        System.out.println("Response Message: "
                + httpUrlConn.getResponseMessage());

        return (httpUrlConn.getResponseCode() == HttpURLConnection.HTTP_OK);
    }
    catch (Exception e)
    {
        System.out.println("Error: " + e.getMessage());
        return false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...