2015-08-17 75 views
1

我在Xamarin.Android上创建应用程序。有一个套接字,它帮助我获取我的应用程序的一些数据。我正在检查这样的互联网连接: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 - 套接字和获取数据的类;启动方法创建新的任务并启动它,通过SocketIOClient.Socket创建套接字; Stop方法调用关闭Socket的方法。这一切都工作正常,直到我尝试禁用互联网连接,我只有一次NameResolutionFailure。可能是什么原因呢?我应该改变什么才能正常工作?谢谢。

回答

1

我认为主要原因是你的网络关闭了。你需要一个互联网来尝试解决一些地址。

+0

是的,我明白这一点,但没有互联网应用程序不应该崩溃。最小它应该创造异常,但是没有任何一个。 –

+0

你有没有尝试在SocketClass.Stop()上放置一个“try catch”?检查这个方法是否会抛出一些异常?应用程序崩溃的唯一解释是启动了一些例外。 –

+0

我在每种方法中添加try-catch块,但应用程序崩溃,没有任何例外.... –

0

我解决了它,没有正确的套接字实现,它进入循环,因为当套接字得到错误,它会自行调用并且不完成,这就是为什么它崩溃。