#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 ваш роуминг неверен. попробуйте разрешить сетевое подключение во время роуминга