java.net.UnknownHostException: Невозможно разрешить хост «<url>»: Нет адреса, связанного с именем хоста и Конец ввода в символе 0

84

Я создал приложение, которое загружает вопрос из моих веб-служб, и оно отлично работает. Но иногда он дает сбой, и я не понимаю, почему это происходит, особенно потому, что я также дал ему необходимые разрешения. Он работает нормально, но случайно вылетает и дает мне этот отчет.

private void sendContinentQuestions(int id) {
    // TODO Auto-generated method stub

    //Get the data (see above)
    JSONArray json = getJSONfromURL(id);
        try{
            for(int i=0; i < json.length(); i++) {
                HashMap<String, String> map = new HashMap<String, String>();
                JSONObject jObject = json.getJSONObject(i);
                longitude":"72.5660200"
                String category_id = jObject.getString("category_id");
                String question_id = jObject.getString("question_id");
                String question_name = jObject.getString("question_name");
                String latitude = jObject.getString("latitude");
                String longitude = jObject.getString("longitude");
                String answer = jObject.getString("answer");
                String ansLatLng = latitude+"|"+longitude ; 
                Log.v("## data:: ###",question_id+"--"+question_name+"-cat id-"+category_id+"--ansLatLng "+ansLatLng+" answer: "+answer);

                all_question.add(new QuestionData(game_id,category_id,question_id,question_name,ansLatLng,answer));
            }
        }catch(JSONException e)        {
            Log.e("log_tag", "Error parsing data "+e.toString());
        }
    }


}
 public JSONArray getJSONfromURL(int id){

    String response = "";
    URL url;
    try {
        url = new URL(Consts.GET_URL+"index.php/Api/getQuestion?cat_id="+id);
        HttpURLConnection http = (HttpURLConnection) url.openConnection();
        http.setRequestMethod("POST");
        InputStream is = http.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        response = br.readLine();
        Log.v("###Response :: ###",response);
        http.disconnect();
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }catch (ProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace(); 
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    //try parse the string to a JSON object
    JSONArray jArray = null;
    try{

        jArray = new JSONArray(response);

    }catch(JSONException e){
        Log.e("log_tag", "Error parsing data "+e.toString());
    }

    return jArray;
}

11-13 15:02:52.307: W/System.err(8012): java.net.UnknownHostException: Unable to resolve host "www.xyz.com": No address associated with hostname
11-13 15:02:52.317: W/System.err(8012):     at java.net.InetAddress.lookupHostByName(InetAddress.java:424)
11-13 15:02:52.317: W/System.err(8012):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
11-13 15:02:52.317: W/System.err(8012):     at java.net.InetAddress.getAllByName(InetAddress.java:214)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282)
11-13 15:02:52.317: W/System.err(8012):     at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)
11-13 15:02:52.327: W/System.err(8012):     at com.abc.xyz.ContinentActivity.getJSONfromURL(ContinentActivity.java:400)
11-13 15:02:52.327: W/System.err(8012):     at com.abc.xyz.ContinentActivity.sendContinentQuestions(ContinentActivity.java:327)
11-13 15:02:52.327: W/System.err(8012):     at com.abc.xyz.ContinentActivity.access$2(ContinentActivity.java:323)
11-13 15:02:52.327: W/System.err(8012):     at com.abc.xyz.ContinentActivity$LoadQuestions.doInBackground(ContinentActivity.java:254)
11-13 15:02:52.327: W/System.err(8012):     at com.abc.xyz.ContinentActivity$LoadQuestions.doInBackground(ContinentActivity.java:1)
11-13 15:02:52.327: W/System.err(8012):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-13 15:02:52.327: W/System.err(8012):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
11-13 15:02:52.327: W/System.err(8012):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-13 15:02:52.327: W/System.err(8012):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
11-13 15:02:52.337: W/System.err(8012):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
11-13 15:02:52.337: W/System.err(8012):     at java.lang.Thread.run(Thread.java:841)
11-13 15:02:52.337: W/System.err(8012): Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
11-13 15:02:52.337: W/System.err(8012):     at libcore.io.Posix.getaddrinfo(Native Method)
11-13 15:02:52.337: W/System.err(8012):     at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:61)
11-13 15:02:52.337: W/System.err(8012):     at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
11-13 15:02:52.337: W/System.err(8012):     ... 24 more
11-13 15:02:52.337: E/log_tag(8012): Error parsing data org.json.JSONException: End of input at character 0 of 
11-13 15:02:52.337: W/dalvikvm(8012): threadid=194: thread exiting with uncaught exception (group=0x417c1700)
11-13 15:02:52.337: E/AndroidRuntime(8012): FATAL EXCEPTION: AsyncTask #5
11-13 15:02:52.337: E/AndroidRuntime(8012): java.lang.RuntimeException: An error occured while executing doInBackground()
11-13 15:02:52.337: E/AndroidRuntime(8012):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at java.util.concurrent.FutureTask.run(FutureTask.java:239)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at java.lang.Thread.run(Thread.java:841)
11-13 15:02:52.337: E/AndroidRuntime(8012): Caused by: java.lang.NullPointerException
11-13 15:02:52.337: E/AndroidRuntime(8012):     at com.abc.xyz.ContinentActivity.sendContinentQuestions(ContinentActivity.java:328)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at com.abc.xyz.ContinentActivity.access$2(ContinentActivity.java:323)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at com.abc.xyz.ContinentActivity$LoadQuestions.doInBackground(ContinentActivity.java:254)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at com.abc.xyz.ContinentActivity$LoadQuestions.doInBackground(ContinentActivity.java:1)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-13 15:02:52.337: E/AndroidRuntime(8012):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
Решма
источник
15
Вы подключены к Интернету?
Apoorv
Вы получаете ответ в своем журнале?
GrIsHu
Да, я проверил подключение к Интернету.
Решма
1
Проверьте, может ли телефон получить доступ к этому URL-адресу (например, в браузере)
Не пытайтесь использовать симулятор, у меня была такая же проблема. И я потратил 1 день, пытаясь понять это. Наконец, моим решением было использовать для тестирования настоящее устройство Android.
JPerk

Ответы:

224

Я тоже столкнулся с этой проблемой, повторное подключение Wi-Fi может решить эту проблему.

Что касается нас, мы можем проверить, может ли телефон разрешить хост в IP при запуске приложения. Если это не удается, попросите пользователя проверить Wi-Fi, а затем выйдите.

Я надеюсь, что это помогает.

RxRead
источник
БОЛЬШОЕ СПАСИБО! Я не мог понять, почему я могу подключиться к адресу, но не получить к нему доступ через свое приложение. Глупая ошибка WiFi ...
DemonGyro
Пришлось выключить телефон!
Франсиско Корралес Моралес
Я долго пытался понять, почему мое приложение больше не работает ... Из всего, что могло случиться, вот оно. Спасибо!!
thomaspsk
4
Эта проблема все еще существует в Android 7? Я могу случайно столкнуться с таким поведением при открытии приложения. Сетевое соединение доступно для приложения, но оно подключает доступ к веб-службам. Что могло быть причиной этого? У нескольких устройств в сети такая же проблема.
X-HuMan
Может ли быть какой-то способ подать предупреждение или тост пользователю, потому что программисты могут понять проблему, но пользователь не придет в stackoverflow, он просто удалит приложение ..
DragonFire
20

Если повторное подключение к Wi-Fi у вас не работает, попробуйте перезагрузить устройство.

У меня это работает. Надеюсь, поможет.

Джие
источник
16

У меня было такое же исключение в симуляторе (Android Studio на OSX), но подключение к тому же URL-адресу на симуляторе iOS работало нормально ... Похоже, все это связано с тем фактом, что я запускал симулятор при подключении к личной точке доступа для моего подключения к Интернету, а затем вернулся позже, когда был подключен к Wi-Fi, и симулятору не понравилось новое подключение к Интернету по какой-то причине, похоже, он думал, что старая точка доступа была текущим подключением, которое больше не работало ..

Закрытие и повторный запуск симулятора сработали!

CMash
источник
9

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

Адубей
источник
5

Не удалось настроить тег в файле манифеста

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Аджай Такур
источник
4

Я столкнулся с этой ошибкой, когда запускал свое приложение для Android на домашнем Wi-Fi, а затем пытался запустить его на другом Wi-Fi, не закрывая симулятор.

Просто закрыть симулятор и повторно запустить приложение сработало!

А. Салливан
источник
2

У меня была эта проблема на Android 10,

Изменено targetSdkVersion 29на targetSdkVersion 28Устранена. Не уверен, в чем настоящая проблема.

Я считаю, что это не очень хорошая практика, но она сработала.

до:

compileSdkVersion 29

minSdkVersion 14

targetSdkVersion 29

В настоящее время:

compileSdkVersion 29

minSdkVersion 14

targetSdkVersion 28

Веттиянакан
источник
1

Я тестировал свое приложение с эмулятором Android и решил эту проблему, отключив и включив Wi-Fi на устройстве-эмуляторе Android! Это сработало отлично.

Эрнан Даниэль Пинья Ландинес
источник
Я сделал то же самое, только с мобильными данными.
Primož Ivančič
1

У меня была такая же проблема, но с Glide. Когда я собирался отключиться от Wi-Fi и снова подключиться (как это было предложено здесь), я заметил, что нахожусь в режиме полета 🤦‍♂️

Габриэль Гедес
источник
0

У меня такая же проблема. java.net.UnknownHostException: невозможно разрешить хост «» ...

Я использую Visual Studio 2019 и Xamarin.

Я также снова переключился на свой Wi-Fi, но был в горячей точке.

Я решил это чистым смахиванием эмулятора. Восстановить заводские настройки. Затем повторно запустите приложение Visual Studio xamarin, которое снова развернет ваше приложение в новом эмуляторе.

Это сработало. Я думал, что буду сражаться несколько дней, чтобы решить эту проблему. К счастью, этот пост указал мне правильное направление.

Раньше я не мог понять, как он работал идеально, а затем остановился без изменения кода.

Это мой код для справки:

using var response = await httpClient.GetAsync(sb.ToString());
string apiResponse = await response.Content.ReadAsStringAsync();
Ашандра Сингх
источник
0

У меня была такая же проблема, но с небольшой разницей. Я добавил NetworkConnectionCallback, чтобы проверить ситуацию, когда интернет-соединение изменилось во время выполнения, и проверял это перед отправкой всех запросов:

private fun isConnected(): Boolean {
    val activeNetwork = cManager.activeNetworkInfo
    return activeNetwork != null && activeNetwork.isConnected
}

Может быть состояние типа ПОДКЛЮЧЕНИЕ (при включении Wi-Fi видно, значок начинает мигать, после подключения к сети изображение статичное). Итак, у нас есть два разных состояния: одно CONNECT, другое CONNECTING, и когда Retrofit пытается отправить запрос, подключение к Интернету отключается и выдает исключение UnknownHostException. Я забыл добавить еще один тип исключения в функцию, которая отвечает за отправку запросов.

try{
//for example, retrofit call
}
catch (e: Exception) {
        is UnknownHostException -> "Unknown host!"
        is ConnectException -> "No internet!"
        else -> "Unknown exception!"
    }

Это просто непростой момент, который может быть связан с этой проблемой.

Надеюсь, помогу кому-нибудь)

Борис Верига
источник