【问题标题】:How to handle com.android.volley.NoConnectionError: java.net.UnknownHostException如何处理 com.android.volley.NoConnectionError: java.net.UnknownHostException
【发布时间】:2017-03-01 22:12:26
【问题描述】:

我在我的应用程序中使用 Volley 进行网络通话,除了一种状态,我的设备以某种方式没有获得网络连接但通过代码检查连接使用以下代码返回 true 的状态之外,一切工作正常且顺利。

public static boolean isNetworkAvailable() {

    ConnectivityManager connectivityManager = SessionApplication.getConnectivityManager();
    if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED ||
            connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {
        //we are connected to a network
        return true;
    }
    else
        return false;
}

而不是使用上面的代码返回网络状态 false 我的 volley web 调用返回这个异常“handle com.android.volley.NoConnectionError: java.net.UnknownHostException”。

我通过在我的设备中打开浏览器检查了我的互联网连接,发现它也无法正常工作。所以我对应用程序行为没问题,但我仍然需要处理这种情况,因为这不是用户友好的用户,应该提示一个对话框“检查您的 Internet 连接!”。

这应该是 Android 中的常见问题,请任何人帮助我给我处理此类情况的最佳方法。提前致谢。

网络状态为:

【问题讨论】:

    标签: java android https unknown-host android-connectivitymanager


    【解决方案1】:

    此异常表示连接存在问题。事实上,您可以显示一些有关连接的对话框。覆盖onErrorResponse(VolleyError error) 你可以这样做 -

    public void onErrorResponse(VolleyError error) {
                            Log.d(TAG, error.toString());
                            if (error instanceof NoConnectionError)
                            new AlertDialog.Builder(this).setMessage(
                                    "Unable to connect to the server! Please ensure your internet is working!").show();
                        }
    

    【讨论】:

      【解决方案2】:

      试试这个方法可能会有帮助

      public boolean isConnectedToInternet(){
              connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                if (connectivityManager != null){
                    NetworkInfo[] info = connectivityManager.getAllNetworkInfo();
                    if (info != null){
                        for (int i = 0; i < info.length; i++){
                            if (info[i].getState() == NetworkInfo.State.CONNECTED){
                                return true;
                            }
                        } 
                    }
                }
                return false;
          }
      

      【讨论】:

      • 我刚刚尝试过,但这也返回了 true。请参阅我附上的屏幕截图。
      • @SureshSharma 你的漫游是假的。尝试在漫游时允许网络连接
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      • 2018-03-30
      • 2018-11-02
      • 2018-12-30
      • 1970-01-01
      相关资源
      最近更新 更多