java.net.UnknownHostException:无法解析主机“<url>”:没有与主机名关联的地址和字符 0 处的输入结束

Posted

技术标签:

【中文标题】java.net.UnknownHostException:无法解析主机“<url>”:没有与主机名关联的地址和字符 0 处的输入结束【英文标题】:java.net.UnknownHostException: Unable to resolve host "<url>": No address associated with hostname and End of input at character 0 of 【发布时间】:2013-11-25 22:01:24 【问题描述】:

我创建了一个从我的网络服务加载问题的应用程序,它运行良好。但是,有时它会崩溃,我不明白为什么会发生这种情况,特别是因为我也给了它所需的权限。它工作正常,但随机崩溃并给我这个报告。

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)

【问题讨论】:

你连接到互联网了吗? 您的日志中是否打印了响应? 是的,我已经检查了互联网连接。 检查手机是否可以访问这个url(以浏览器为例) 不要尝试模拟器,我也遇到过同样的问题。我花了 1 天的时间试图弄清楚。最后,我的解决方案是使用真正的安卓设备进行测试。 【参考方案1】:

我也遇到了这个问题,重新连接wifi就可以解决了。

对于我们来说,我们可以在启动应用程序时检查手机是否可以将主机解析为 IP。如果不能解决,告诉用户检查WiFi然后退出。

希望对你有帮助。

【讨论】:

非常感谢!我不知道为什么我可以连接到该地址但不能通过我的应用程序访问它。愚蠢的 WiFi 错误... 我不得不关掉手机! 花了很长时间试图弄清楚为什么我的应用程序不再工作......在所有可能发生的事情中,就是这样。谢谢!! 这个问题在 Android 7 中仍然存在吗?我可以在应用程序打开时随机遇到这种行为。网络连接可用于应用程序,但它连接对 Web 服务的访问。什么可能导致这种情况?网络中的多台设备存在相同的问题。 有什么方法可以向用户发出警告或祝酒,因为程序员可能理解问题但用户不理解他不会来 *** 他只会卸载应用程序..【参考方案2】:

如果重新连接 WiFi 对您不起作用,请尝试重新启动您的设备。

这对我有用。希望对您有所帮助。

【讨论】:

【参考方案3】:

我在模拟器中遇到了同样的异常(OSX 上的 Android Studio),但在 ios 模拟器上连接到相同的 URL 工作正常......看起来这一切都源于我在连接到时运行模拟器的事实我的互联网连接的个人热点,然后在连接到 wifi 时又回来了,模拟器由于某种原因不喜欢新的互联网连接,似乎它认为旧热点是当前连接,它不再工作..

关闭并重新启动模拟器有效!

【讨论】:

【参考方案4】:

我遇到了同样的错误,问题是我使用的是 ***,但我没有意识到。断开***并重新连接到我的WIFI网络后,问题就解决了。

【讨论】:

此解决方案适用于断开 *** 【参考方案5】:

未能在清单文件中配置标签

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

【讨论】:

【参考方案6】:

在我的家庭 WiFi 上运行我的 Android 应用程序时遇到此错误,然后尝试在不同的 WiFi 上运行它而不关闭我的模拟器。

只需关闭模拟器并重新启动应用程序对我有用!

【讨论】:

【参考方案7】:

我遇到了同样的问题。 java.net.UnknownHostException:无法解析主机“”...

我正在运行 Visual Studio 2019 和 Xamarin。

我也切换回了我的 WiFi,但处于热点。

我通过干净地滑动模拟器解决了这个问题。恢复出厂设置。然后重新运行 Visual Studio xamarin 应用程序,它会将您的应用程序重新部署到新的模拟器。

成功了。我以为我要战斗好几天才能解决这个问题。幸运的是,这篇文章为我指明了正确的方向。

我无法理解它之前是如何完美运行的,然后在没有代码更改的情况下停止了。

这是我的参考代码:

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

【讨论】:

【参考方案8】:

我正在使用 Android 模拟器测试我的应用程序,我通过关闭和打开 Android 模拟器设备上的 Wi-Fi 解决了这个问题!效果很好。

【讨论】:

我做了同样的事情,只是使用移动数据。【参考方案9】:

我遇到了同样的问题,但使用 Glide。当我要断开 wifi 并重新连接时(就像这里建议的那样),我注意到我处于飞行模式?‍♂️

【讨论】:

【参考方案10】:

我遇到了同样的问题,但差别很小。我添加了 NetworkConnectionCallback 来检查运行时 Internet 连接发生变化的情况,并在发送所有请求之前像这样检查:

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

可以有CONNECTING之类的状态(可以看到iе打开wifi时,图标开始闪烁,连接网络后,图像是静态的)。 因此,我们有两种不同的状态:一种是 CONNECT,另一种是 CONNECTING,当 Retrofit 尝试发送请求时,互联网连接被禁用并抛出 UnknownHostException。 我忘了在负责发送请求的函数中添加另一种类型的异常。

try
//for example, retrofit call

catch (e: Exception) 
        is UnknownHostException -> "Unknown host!"
        is ConnectException -> "No internet!"
        else -> "Unknown exception!"
    

这只是一个与此问题相关的棘手时刻。

希望,我会帮助别人)

【讨论】:

【参考方案11】:

我遇到了这个问题 我所做的解决方案是重新启动我的 android 设备或模拟器。 它为我解决了这个问题。

【讨论】:

【参考方案12】:

我在 Android 10 上遇到过这个问题,

已将 targetSdkVersion 29 更改为 targetSdkVersion 28 问题已解决。不知道真正的问题是什么。

我认为这不是一个好的做法,但它确实有效。

之前:

compileSdkVersion 29

minSdkVersion 14

targetSdkVersion 29

现在:

compileSdkVersion 29

minSdkVersion 14

targetSdkVersion 28

【讨论】:

您的解决方案对我有用!非常感谢!体验过搭载 Android 10 的三星 Galaxy M31。 这不是解决方案,它非常严格

以上是关于java.net.UnknownHostException:无法解析主机“<url>”:没有与主机名关联的地址和字符 0 处的输入结束的主要内容,如果未能解决你的问题,请参考以下文章