我在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的Close方法。这一切正常,直到我尝试禁用互联网连接,我只得到一次NameResolutionFailure。它可能是什么原因?我应该改变什么才能使用它可以正常工作?感谢。
答案 0 :(得分:1)
我认为主要原因是你的互联网已关闭。您需要互联网才能尝试解析某个地址。
答案 1 :(得分:0)
我解决了它,没有正确的socket实现,它进入循环,因为当socket出错时它调用自己并且没有完成它崩溃的原因。