Как обработать ошибку подключения при отсутствии интернета на андроиде?

При отсутствии интернета андроид приложение крэшится сразу. Все подключения выполняю в AsyncTask и вызов заношу в блок try catch

try{
			new UpdateTask(getApplicationContext()).execute(params);
		} catch (Throwable t) {
			Toast.makeText(
					getApplicationContext(),
					"Ошибка соединения",
					Toast.LENGTH_SHORT).show();
		}
  • Вопрос задан
  • 8090 просмотров
Пригласить эксперта
Ответы на вопрос 3
FanKiLL
@FanKiLL
public class NetworkManager {

    public static boolean isNetworkAvailable(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = cm.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isConnected()) {
            return true;
        } else {
            return false;
        }
    }
}


и перед каждым запросом проверять сеть

if (NetworkManager.isNetworkAvailable(context)) {
    // делаем спокойно запрос
} else {
    // если сети нет показываем Тост или 
    // кидаем на активити с красивым дизайном где просим сделать реконнект
}


Требует пермишина, в манифест добавляем пермишин

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Ответ написан
Комментировать
deadbyelpy
@deadbyelpy
веб-шмеб
надеюсь у вас есть какой то общий класс родитель для таких тасков, в его "execute" можно добавить проверку на подключение к интернету, и если его нет, то делать что другое, или ничего.

для проверки наличия соединения:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

и
private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
          = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
Ответ написан
Комментировать
itvdonsk
@itvdonsk
Android Developer
Ставить исключение нужно в блоке выполняющем подключение. В вашем случае нужно ставить в функции doInBackground AsyncTask'a

P.S. Из doInBackground AsyncTask'a нельзя показать Toast
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы