Как обработать com.android.volley.Ошибка NoConnectionError: java.net .UnknownHostException

#java #android #https #unknown-host #android-connectivitymanager

#java #Android #https #неизвестный хост #android-connectivitymanager

Вопрос:

Я использую Volley для веб-вызовов в своем приложении, и все работает нормально и гладко, за исключением одного состояния, в котором каким-то образом мое устройство не получает сетевое подключение, но проверка соединения с помощью кода возвращает true, используя приведенный ниже код.

 public static boolean isNetworkAvailable() {

    ConnectivityManager connectivityManager = SessionApplication.getConnectivityManager();
    if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED ||
            connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {
        //we are connected to a network
        return true;
    }
    else
        return false;
}
  

Вместо того, чтобы возвращать состояние сети false, используя приведенный выше код, мои веб-вызовы volley возвращают мне это исключение «обрабатывать com.android.volley.Ошибка NoConnectionError: java.net .UnknownHostException «.

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

Это должно быть распространенной проблемой в Android, может ли кто-нибудь, пожалуйста, помочь мне найти наилучший подход к обработке таких случаев. Заранее спасибо.

Состояние сети равно :введите описание изображения здесь

Ответ №1:

Это исключение указывает на проблему с подключением. На самом деле вы можете показать некоторое диалоговое окно о подключении. Переопределение onErrorResponse(VolleyError error) вы можете сделать следующим образом —

 public void onErrorResponse(VolleyError error) {
                        Log.d(TAG, error.toString());
                        if (error instanceof NoConnectionError)
                        new AlertDialog.Builder(this).setMessage(
                                "Unable to connect to the server! Please ensure your internet is working!").show();
                    }
  

Ответ №2:

Попробуйте этот метод, возможно, поможет

 public boolean isConnectedToInternet(){
        connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
          if (connectivityManager != null){
              NetworkInfo[] info = connectivityManager.getAllNetworkInfo();
              if (info != null){
                  for (int i = 0; i < info.length; i  ){
                      if (info[i].getState() == NetworkInfo.State.CONNECTED){
                          return true;
                      }
                  } 
              }
          }
          return false;
    }
  

Комментарии:

1. Я только что попробовал с этим, но это также возвращает true. Смотрите скриншот, который я прикрепил.

2. @SureshSharma ваш роуминг неверен. попробуйте разрешить сетевое подключение во время роуминга