java.net.UnknownHostException: Nie można rozpoznać hosta „<url>”: brak adresu skojarzonego z nazwą hosta i koniec wprowadzania w znaku 0 w

84

Stworzyłem aplikację, która ładuje pytanie z moich usług internetowych i działa dobrze. Ale czasami się zawiesza i nie rozumiem powodu, dla którego tak się dzieje, zwłaszcza że nadałem mu również wymagane uprawnienia. Działa dobrze, ale losowo ulega awarii i daje mi ten raport.

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)
Reshma
źródło
15
Czy masz połączenie z Internetem?
Apoorv
Czy otrzymujesz odpowiedź w swoim dzienniku?
GrIsHu
Tak, sprawdziłem połączenie internetowe.
Reshma
1
Sprawdź, czy telefon może uzyskać dostęp do tego
Nie próbuj z symulatorem, miałem ten sam problem. Spędziłem 1 dzień próbując to rozgryźć. Ostatecznie moim rozwiązaniem było użycie do testowania prawdziwego urządzenia z Androidem.
JPerk

Odpowiedzi:

225

Napotkałem również ten problem, ponowne podłączenie Wi-Fi może rozwiązać ten problem.

Dla nas możemy sprawdzić, czy telefon może rozwiązać hosta na IP, gdy uruchamiamy aplikację. Jeśli nie można rozwiązać problemu, powiedz użytkownikowi, aby sprawdził WiFi, a następnie zamknij.

Mam nadzieję, że to pomoże.

RxRead
źródło
BARDZO DZIĘKUJĘ! Nie mogłem dowiedzieć się, dlaczego mogę połączyć się z adresem, ale nie mogę uzyskać do niego dostępu za pośrednictwem mojej aplikacji. Głupi błąd WiFi ...
DemonGyro,
Musiałem wyłączyć telefon!
Francisco Corrales Morales
Spędziłem dużo czasu, próbując dowiedzieć się, dlaczego moja aplikacja już nie działa ... Ze wszystkich rzeczy, które mogła to być, to było to. Dziękuję Ci!!
Tomaszpsk
4
Czy ten problem nadal występuje w systemie Android 7? Mogę napotkać to zachowanie losowo podczas otwierania aplikacji. Połączenie sieciowe jest dostępne dla aplikacji, ale łączy dostęp do usług internetowych. Co może to spowodować? Kilka urządzeń w sieci ma ten sam problem.
X-HuMan
Czy może być jakiś sposób, aby dać alert lub tosty do użytkownika, ponieważ programiści mogą zrozumieć problem, ale użytkownik nie on nie przyjdzie do stackoverflow będzie on po prostu odinstalować aplikację ..
Dragonfire
20

Jeśli ponowne połączenie Wi-Fi nie działa, spróbuj ponownie uruchomić urządzenie.

To działa dla mnie. Mam nadzieję, że to pomoże.

Jiyeh
źródło
16

Miałem ten sam wyjątek w symulatorze (Android Studio na OSX), ale połączenie z tym samym adresem URL w symulatorze iOS działało dobrze ... Wygląda na to, że wszystko wynikało z faktu, że uruchomiłem symulator, będąc połączonym z osobistym hotspotem dla mojego połączenia internetowego, a następnie wróciłem później, gdy byłem podłączony do Wi-Fi, a symulatorowi z jakiegoś powodu nie podobało się nowe połączenie internetowe, wydaje się, że myślał, że stary hotspot był bieżącym połączeniem, które już nie działało.

Zamykanie i ponowne uruchamianie symulatora działało!

CMash
źródło
9

Otrzymałem ten sam błąd, a problem polegał na tym, że korzystałem z VPN i nie zdawałem sobie z tego sprawy. Po odłączeniu się od VPN i ponownym połączeniu z moją siecią WIFI problem został rozwiązany.

adubey
źródło
5

Nie udało się skonfigurować tagu w pliku manifestu

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Ajay Takur
źródło
4

Napotkałem ten błąd podczas uruchamiania aplikacji na Androida na moim domowym Wi-Fi, a następnie próbowałem uruchomić ją na innym WiFi bez zamykania mojego symulatora.

Po prostu zamknięcie symulatora i ponowne uruchomienie aplikacji zadziałało!

A. Sullivan
źródło
2

Miałem ten problem na Androidzie 10,

Zmieniono targetSdkVersion 29na targetSdkVersion 28problem rozwiązany. Nie wiem, jaki jest rzeczywisty problem.

Myślę, że nie jest to dobra praktyka, ale zadziałała.

przed:

compileSdkVersion 29

minSdkVersion 14

targetSdkVersion 29

Teraz:

compileSdkVersion 29

minSdkVersion 14

targetSdkVersion 28

Vettiyanakan
źródło
1

Testowałem swoją aplikację na emulatorze Androida i rozwiązałem ten problem wyłączając i włączając Wi-Fi na urządzeniu z emulatorem Androida! Działało doskonale.

Hernán Daniel Piña Landinez
źródło
Zrobiłem to samo, tylko z mobilną transmisją danych.
Primož Ivančič
1

Miałem ten sam problem, ale z Glide. Kiedy miałem się rozłączyć z Wi-Fi i połączyć ponownie (tak jak to sugerowano tutaj), zauważyłem, że jestem w trybie samolotowym 🤦‍♂️

Gabriel Guedes
źródło
0

Miałem ten sam problem. java.net.UnknownHostException: nie można rozpoznać hosta „” ...

Używam programu Visual Studio 2019 i Xamarin.

Przełączałem się z powrotem na Wi-Fi, ale byłem w gorącym miejscu.

Rozwiązałem to, przesuwając czysty emulator. Przywróć ustawienia fabryczne. Następnie ponownie uruchom aplikację Visual Studio Xamarin, która ponownie wdroży Twoją aplikację do nowego emulatora.

Zadziałało. Myślałem, że będę walczył przez wiele dni, aby to rozwiązać. Na szczęście ten post wskazał mi właściwy kierunek.

Nie mogłem zrozumieć, jak to działało doskonale wcześniej, a potem przestało działać bez zmiany kodu.

To jest mój kod w celach informacyjnych:

using var response = await httpClient.GetAsync(sb.ToString());
string apiResponse = await response.Content.ReadAsStringAsync();
Ashandra Singh
źródło
0

Miałem ten sam problem, ale z małą różnicą. Dodałem NetworkConnectionCallback, aby sprawdzić sytuację, w której połączenie internetowe uległo zmianie w czasie wykonywania, i sprawdzić w ten sposób przed wysłaniem wszystkich żądań:

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

Może występować stan taki jak ŁĄCZENIE (widać, że po włączeniu Wi-Fi ikona zaczyna migać, po podłączeniu do sieci obraz jest statyczny). Mamy więc dwa różne stany: jeden CONNECT inny CONNECTING, a gdy Retrofit próbował wysłać żądanie, połączenie internetowe jest wyłączone i wyrzuca UnknownHostException. Zapomniałem dodać inny typ wyjątku w funkcji, który był odpowiedzialny za wysyłanie żądań.

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

To tylko trudny moment, który można powiązać z tym problemem.

Mam nadzieję, że komuś pomogę)

Boris Veriga
źródło