java.net.UnknownHostException:无法解析主机“ <URL>”:没有与主机名关联的地址以及字符“ 0”的输入结尾


80

我创建了一个应用程序,该应用程序从我的Web服务加载了一个问题,并且运行正常。但是,有时会崩溃,而我不知道为什么会发生这种情况,尤其是因为我还给了它所需的权限。它工作正常,但随机崩溃,并给了我这份报告。

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)

14
您已连接到互联网吗?
Apoorv

您是否将响应打印在日志中?
GrIsHu 2013年

是的,我已经检查了互联网连接。
Reshma

1
检查电话是否可以访问此网址(例如在浏览器中)

不要尝试使用模拟器,我遇到了同样的问题。我花了1天的时间试图弄清楚。最后,我的解决方案是使用真实的android设备进行测试。
JPerk

Answers:


218

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

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

希望对您有所帮助。


谢谢!我不知道为什么我可以连接到该地址但不能通过我的应用程序访问它。愚蠢的WiFi错误...
DemonGyro 2014年

我不得不关闭手机!
Francisco Corrales Morales 2014年

花了很长时间试图弄清楚为什么我的应用程序不再起作用...在所有可能的事情中,就是这样。谢谢!!
thomaspsk

3
这个问题在Android 7中仍然存在吗?我可以在打开应用程序时随机遇到此行为。网络连接可用于该应用程序,但它连接对Web服务的访问。是什么原因造成的?网络中的多个设备存在相同的问题。
X-HuMan

能有一些方法来给警报或举杯向用户因为程序员可以理解的问题,但用户不,他不会来的StackOverflow他将刚刚卸载的应用..
DragonFire

19

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

这对我有用。希望能帮助到你。


16

我在模拟器(OSX上的Android Studio)中有一个相同的例外,但是在iOS模拟器上连接到相同的URL效果很好...看起来这一切都源于我在连接个人热点的同时运行模拟器的事实我的互联网连接,然后在连接到wifi时又回来了,模拟器由于某种原因不喜欢新的互联网连接,似乎以为旧热点是当前连接,不再可用。

关闭并重新启动模拟器成功了!


8

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



4

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

只需关闭模拟器并重新启动该应用程序,对我来说就是成功!


2

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

改变targetSdkVersion 29targetSdkVersion 28解决的问题。不知道实际的问题是什么。

我认为这不是一个好习惯,但确实有效。

之前:

compileSdkVersion 29

minSdkVersion 14

targetSdkVersion 29

现在:

compileSdkVersion 29

minSdkVersion 14

targetSdkVersion 28




0

我有同样的问题。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();

0

我有同样的问题,但差别不大。我添加了NetworkConnectionCallback来检查Internet连接在运行时发生变化的情况,并在发送所有请求之前进行如下检查:

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

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

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

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

希望,我会帮助某人)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.