109

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

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)
4

12 回答 12

263

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

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

我希望它有所帮助。

于 2013-11-29T03:33:34.283 回答
24

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

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

于 2016-07-04T03:27:22.107 回答
19

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

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

于 2016-03-02T19:54:20.963 回答
10

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

于 2014-04-27T05:43:43.740 回答
7

错过在清单文件中配置标签

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
于 2015-08-11T05:32:19.570 回答
5

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

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

于 2017-02-09T15:24:40.910 回答
3

我有同样的问题。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();
于 2019-12-30T20:46:12.077 回答
2

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

于 2019-03-14T05:03:44.103 回答
1

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

于 2020-01-05T20:47:25.827 回答
1

我有同样的问题,但差别很小。我添加了 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!"
    }

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

希望,我会帮助别人)

于 2020-04-08T11:18:14.000 回答
0

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

于 2021-10-21T15:50:13.343 回答
-2

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

更改targetSdkVersion 29为已解决的targetSdkVersion 28问题。不确定实际问题是什么。

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

前:

compileSdkVersion 29

minSdkVersion 14

targetSdkVersion 29

现在:

compileSdkVersion 29

minSdkVersion 14

targetSdkVersion 28

于 2020-03-24T04:38:26.530 回答