java.net.UnknownHostException: Không thể phân giải máy chủ lưu trữ “<url>”: Không có địa chỉ nào được liên kết với tên máy chủ và Kết thúc đầu vào ở ký tự 0 của


84

Tôi đã tạo một ứng dụng tải câu hỏi từ các dịch vụ web của mình và nó hoạt động tốt. Tuy nhiên, đôi khi nó bị treo và tôi không hiểu lý do tại sao điều này lại xảy ra, đặc biệt là vì tôi cũng đã cấp cho nó các quyền cần thiết. Nó hoạt động tốt, nhưng ngẫu nhiên, nó bị lỗi và cho tôi báo cáo này.

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
Bạn có kết nối với Internet không?
Apoorv

Bạn có nhận được câu trả lời được in trong nhật ký của mình không?
GrIsHu

Có, tôi đã kiểm tra kết nối internet.
Reshma

1
Kiểm tra xem điện thoại có thể truy cập vào url này (trong trình duyệt cho dụ)

Không thử với trình mô phỏng, tôi đã gặp vấn đề tương tự. Và tôi đã dành 1 ngày để tìm hiểu nó. Cuối cùng, giải pháp của tôi là sử dụng một thiết bị Android thực để thử nghiệm.
JPerk

Câu trả lời:


224

Tôi cũng gặp sự cố này, kết nối lại WiFi có thể giải quyết được vấn đề này.

Đối với chúng tôi, chúng tôi có thể kiểm tra xem điện thoại có thể phân giải máy chủ lưu trữ thành IP khi chúng tôi khởi động ứng dụng hay không. Nếu nó không thể giải quyết, hãy yêu cầu người dùng kiểm tra WiFi và sau đó thoát.

Tôi hy vọng nó sẽ giúp.


CẢM ƠN CÁC BẠN RẤT NHIỀU! Tôi không thể tìm ra lý do tại sao tôi có thể kết nối với địa chỉ nhưng không thể truy cập địa chỉ đó thông qua ứng dụng của mình. Lỗi WiFi ngu ngốc ...
DemonGyro

Tôi đã phải tắt điện thoại của mình!
Francisco Corrales Morales

Đã dành một thời gian dài cố gắng tìm ra lý do tại sao ứng dụng của tôi không còn hoạt động nữa ... Trong tất cả những thứ có thể xảy ra, chính là nó. Cảm ơn bạn!!
thomaspsk

4
Vấn đề này có còn tồn tại trong Android 7 không? Tôi có thể gặp hành vi này ngẫu nhiên khi mở ứng dụng. Kết nối mạng khả dụng cho ứng dụng, nhưng nó kết nối quyền truy cập vào các dịch vụ web. Điều gì có thể gây ra điều này? Một số thiết bị trong mạng có cùng một vấn đề.
X-HuMan

Có thể có một số cách để đưa ra cảnh báo hoặc nâng cốc cho người dùng vì các lập trình viên có thể hiểu vấn đề nhưng người dùng thì không, anh ấy sẽ không đến stackoverflow mà anh ấy sẽ gỡ cài đặt ứng dụng ..
DragonFire

20

Nếu kết nối lại WiFi không hoạt động với bạn, hãy thử khởi động lại thiết bị của bạn.

Điều này làm việc cho tôi. Hy vọng nó giúp.


16

Tôi đã có ngoại lệ tương tự trong trình mô phỏng (Android Studio trên OSX) nhưng kết nối với cùng một URL trên trình mô phỏng iOS hoạt động tốt ... Có vẻ như tất cả đều xuất phát từ thực tế là tôi đang chạy trình mô phỏng trong khi kết nối với điểm phát sóng cá nhân cho kết nối internet của tôi và sau đó quay lại sau khi được kết nối với Wi-Fi và trình mô phỏng không thích kết nối internet mới vì một số lý do, có vẻ như điểm phát sóng cũ là kết nối hiện tại, không còn hoạt động ..

Đóng và khởi chạy lại trình mô phỏng đã hoạt động!


9

Tôi gặp lỗi tương tự và vấn đề là tôi đang sử dụng VPN và tôi không nhận ra. Sau khi ngắt kết nối khỏi VPN và kết nối lại với mạng WIFI của tôi, sự cố đã được giải quyết.


5

Đã lỡ định cấu hình thẻ trong tệp kê khai

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

4

Tôi gặp phải lỗi này khi chạy ứng dụng Android trên Wi-Fi tại nhà của mình, sau đó cố chạy ứng dụng trên Wi-Fi khác mà không đóng trình mô phỏng.

Chỉ cần đóng trình mô phỏng và khởi chạy lại ứng dụng đã phù hợp với tôi!


2

Tôi gặp sự cố này trên Android 10,

Đã thay đổi targetSdkVersion 29để targetSdkVersion 28giải quyết vấn đề. Không chắc chắn vấn đề thực tế là gì.

Tôi nghĩ không phải là một thực hành tốt, nhưng nó đã hiệu quả.

trước:

compileSdkVersion 29

minSdkVersion 14

targetSdkVersion 29

Hiện nay:

compileSdkVersion 29

minSdkVersion 14

targetSdkVersion 28


1

Tôi đang thử nghiệm ứng dụng của mình với trình giả lập Android và tôi đã giải quyết được vấn đề này bằng cách tắt và bật Wi-Fi trên thiết bị giả lập Android! Nó hoạt động hoàn hảo.


Tôi đã làm điều tương tự, chỉ với dữ liệu di động.
Primož Ivančič

1

Tôi đang gặp vấn đề tương tự, nhưng với Glide. Khi tôi định ngắt kết nối khỏi Wi-Fi và kết nối lại (giống như nó được đề xuất ở đây), tôi nhận thấy rằng tôi đang ở Chế độ trên máy bay 🤦‍♂️


0

Tôi đã từng gặp vấn đề tương tự. java.net.UnknownHostException: Không thể giải quyết máy chủ lưu trữ “” ...

Tôi đang chạy Visual Studio 2019 và Xamarin.

Tôi cũng đã chuyển trở lại WiFi của mình nhưng ở trên một điểm nóng.

Tôi đã giải quyết điều này bằng cách vuốt sạch trình giả lập. Khôi phục về cài đặt gốc. Sau đó, chạy lại ứng dụng xamarin studio trực quan sẽ triển khai lại ứng dụng của bạn với trình giả lập mới.

Nó đã làm việc. Tôi đã nghĩ rằng tôi sẽ chiến đấu trong nhiều ngày để giải quyết chuyện này. May mắn thay, bài viết này đã chỉ cho tôi đúng hướng.

Tôi không thể hiểu cách nó hoạt động hoàn hảo trước đó và sau đó dừng lại mà không thay đổi mã.

Đây là mã của tôi để tham khảo:

using var response = await httpClient.GetAsync(sb.ToString());
string apiResponse = await response.Content.ReadAsStringAsync();

0

Tôi đã có cùng một vấn đề, nhưng với sự khác biệt nhỏ. Tôi đã thêm NetworkConnectionCallback để kiểm tra tình hình khi kết nối internet đã thay đổi trong thời gian chạy và kiểm tra như thế này trước khi gửi tất cả các yêu cầu:

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

Có thể có trạng thái như CONNECTING (bạn có thể thấy khi bật wifi, biểu tượng bắt đầu nhấp nháy, sau khi kết nối mạng, hình ảnh tĩnh). Vì vậy, chúng ta có hai trạng thái khác nhau: một CONNECT một CONNECTING khác và khi Retrofit cố gắng gửi yêu cầu kết nối internet bị vô hiệu hóa và nó ném ra UnknownHostException. Tôi đã quên thêm một loại ngoại lệ khác trong chức năng chịu trách nhiệm gửi yêu cầu.

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

Đó chỉ là một khoảnh khắc khó khăn có thể liên quan đến vấn đề này.

Hy vọng, tôi sẽ giúp được ai đó)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.