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
Ви підключені до Інтернету?
Апоорв

Чи отримуєте ви відповідь, надруковану у вашому журналі?
GrIsHu

Так, я перевірив підключення до Інтернету.
Решма

1
Перевірте, чи може телефон отримати доступ до цієї URL-адреси (наприклад, у браузері)

Не намагайтеся використовувати симулятор, у мене була та сама проблема. І я витратив 1 день, намагаючись це зрозуміти. Нарешті, моїм рішенням було використовувати справжній андроїд-пристрій для тестування.
JPerk,

Відповіді:


224

Я теж зіткнувся з цією проблемою, це може вирішити повторне підключення WiFi.

Для нас ми можемо перевірити, чи може телефон перетворити хост на IP, коли ми запускаємо програму. Якщо проблему не вдається вирішити, скажіть користувачеві перевірити WiFi, а потім вийдіть.

Сподіваюся, це допоможе.


ВЕЛИКО ДЯКУЮ! Я не міг зрозуміти, чому я можу підключитися до адреси, але не отримати до неї доступ через свій додаток. Дурна помилка WiFi ...
DemonGyro

Мені довелося вимкнути телефон!
Франсіско Корралес Моралес,

Довго намагався з’ясувати, чому мій додаток більше не працює ... З усього, що це могло бути, це було все. Дякую!!
thomaspsk

4
Чи існує ця проблема досі в Android 7? Я можу зіткнутися з такою поведінкою випадково при відкритті програми. Мережеве підключення доступне для програми, але воно підключає доступ до веб-служб. Що може спричинити це? Кілька пристроїв у мережі мають однакову проблему.
X-HuMan

Чи може бути якийсь спосіб дати сповіщення або тост користувачеві, оскільки програмісти можуть зрозуміти проблему, але користувач цього не робить, він не прийде до stackoverflow, він просто
видалить

20

Якщо повторне підключення WiFi не працює для вас, спробуйте перезавантажити пристрій.

Це працює для мене. Сподіваюся, це допоможе.


16

У мене був такий самий виняток у симуляторі (Android Studio на OSX), але підключення до тієї самої URL-адреси на симуляторі iOS працювало нормально ... Схоже, все це випливало з того, що я запускав симулятор під час підключення до особистої точки доступу для мого підключення до Інтернету, а потім повернувся пізніше, коли був підключений до Wi-Fi, і симулятор чомусь не сподобався новому підключенню до Інтернету, здається, він вважав, що стара точка доступу є поточним з'єднанням, яке вже не працює ..

Закриття та перезапуск тренажера спрацювали!


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
}

Може існувати такий стан, як ПІДКЛЮЧЕННЯ (ви бачите, що, коли ви вмикаєте wifi, піктограма починає блимати, після підключення до мережі зображення є статичним). Отже, у нас є два різні стани: один CONNECT інший CONNECTING, і коли Retrofit намагався надіслати запит, з’єднання з Інтернетом вимкнено, і воно видає UnknownHostException. Я забув додати ще один тип винятку у функції, яка відповідала за надсилання запитів.

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

Це просто складний момент, який, пов’язаний із цією проблемою.

Сподіваюся, я комусь допоможу)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.