【问题标题】:Xamarin.Android crashes without InternetXamarin.Android 在没有 Internet 的情况下崩溃
【发布时间】:2015-08-17 17:05:06
【问题描述】:

我在 Xamarin.Android 上创建应用程序。有一个套接字,在它的帮助下,我正在为我的应用程序获取一些数据。我正在像这样检查互联网连接:

_timer = new Timer(CheckNetworkAvailable, new AutoResetEvent(false), 0, 10000);

它调用 OnCreate 方法。

cts = new CancellationTokenSource();
                var isNetwork = await Task.Run(() => this.NetworkRechableOrNot(), cts.Token);                    
                var linear = SupportActionBar.CustomView.FindViewById<LinearLayout>(Resource.Id.linearForActionBanner);
                var identOn = linear.FindViewById<ImageView>(Resource.Id.identificator_on);
                var identOff = linear.FindViewById<ImageView>(Resource.Id.identificator_off);

                RunOnUiThread(() =>
                {
                    identOn.Visibility = !isNetwork ? ViewStates.Gone : ViewStates.Visible;
                    identOff.Visibility = !isNetwork ? ViewStates.Visible : ViewStates.Gone;
                });

                if (isNetwork)
                {
                    if (isNetwork != oldNet)
                    {
                        oldNet = isNetwork;
                        MainDataClass.UpdateSymbolsList();
                        SocketClass.Start();
                    }
                }
                else
                {
                    oldNet = isNetwork;
                    cts.Cancel();
                    SocketClass.Stop();
                }

这里是 oldNet - 以前的互联网访问状态。

private bool NetworkRechableOrNot()
    {
        try
        {
        var connectivityManager = (_Net.ConnectivityManager)GetSystemService(Context.ConnectivityService);
        var activeConnection = connectivityManager.ActiveNetworkInfo;
        return (activeConnection != null) && activeConnection.IsConnected;
        }
        catch (Exception)
        {
            return false;
        }
    }

这是检查的结果方法。

SocketClass - 用于套接字和获取数据的类; Start 方法创建新任务并启动它,通过 SocketIOClient.Socket 创建套接字; Stop 方法调用 Socket 的 Close 方法。在我尝试禁用互联网连接之前一切正常,我只得到了一次 NameResolutionFailure。这可能是什么原因?我应该改变什么才能让它正常工作?谢谢。

【问题讨论】:

    标签: android xamarin socket.io internet-connection


    【解决方案1】:

    我认为主要原因是您的互联网已关闭。您需要互联网来尝试解析某个地址。

    【讨论】:

    • 是的,我明白这一点,但没有互联网应用程序不应该崩溃。最低限度它应该创建异常,但没有任何异常。
    • 你试过在 SocketClass.Stop() 上放一个“try catch”吗?检查此方法是否引发异常?应用崩溃的唯一解释是启动了一些异常。
    • 我在每个方法中都添加了 try-catch 块,但是应用程序崩溃没有任何异常......
    【解决方案2】:

    我解决了,没有正确实现socket,它进入循环,因为当socket出错时它会调用自己并且没有完成这就是它崩溃的原因。

    【讨论】:

      猜你喜欢
      • 2022-10-13
      • 2016-03-19
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      相关资源
      最近更新 更多