Как узнать причину UnknownHostException? - PullRequest
3 голосов
/ 03 апреля 2012

UnknownHostException выбрасывается, если сервер не работает или нет подключения к Интернету.Как я могу определить, было ли выброшено UnknownHostException из-за того, что сервер не работает или нет подключения к Интернету?

Причина этого в том, что мне нужно уведомить пользователя о причине ошибки.И мне нужно отобразить что-то вроде этого: «Извините. Сервис в настоящее время недоступен. Пожалуйста, повторите попытку позже» или «У вас нет подключения к Интернету».

Ответы [ 3 ]

4 голосов
/ 03 апреля 2012

Вы можете проверить состояние сети, чтобы определить, доступно ли подключение к Интернету (но не на 100% надежно):

ConnectivityManager conMgr =  (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED 
    ||  conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING  ) {
...
}

РЕДАКТИРОВАТЬ:

ИМХО, невозможно точно сказать , что телефонное интернет-соединение не работает. Но вы можете, помимо проверки состояния сети, сделать простой тест, такой как загрузка небольшой страницы с веб-сайта в Интернете (выбрать надежный сервер).

Результат этого двойного теста должен быть точным в 99% случаев.

2 голосов
/ 03 апреля 2012

UnKnownHostException генерируется, чтобы указать, что IP-адрес хоста не может быть определен.Дело не в том, что ни одно интернет-соединение или сервер не работает.

также проверьте, добавили ли вы разрешение на доступ в интернет в файле манифеста.

Пожалуйста, укажите это ССЫЛКА

Для проверки интернет-соединения используйте метод bwlow ::

//To check whether network connection is available on device or not
public boolean checkInternetConnection(Activity _activity) {
    ConnectivityManager conMgr = (ConnectivityManager) _activity.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (conMgr.getActiveNetworkInfo() != null
            && conMgr.getActiveNetworkInfo().isAvailable()
            && conMgr.getActiveNetworkInfo().isConnected())
        return true;
    else
        return false;
}//checkInternetConnection()

И если сервер в основном не работает, вы получите исключение тайм-аута соединения

0 голосов
/ 03 апреля 2012

Вы можете использовать ConnectivityManager для проверки состояния сети.

ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
bool hasConnectivity = connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();
...