c# - 没有互联网连接的iOS应用崩溃

标签 c# ios xamarin.forms

我正在使用async方法检索JSON数据,数据成功发送,但是当我关闭设备中的Internet时,该应用程序停止了。如何处理此异常,或者如何处理Xamarin.Forms中的Internet连接。

public partial class MainActivity : ContentPage
    {

        public ObservableCollection<Adverts> Zoos { get; set; }

        public int Count = 0;
        public short Counter = 0;
        public int SlidePosition = 0;
        string heightList;
        int heightRowsList = 90;

        private const string Url = "http://eamobiledirectory.com/cooperp/Mobile/Mobileapi.aspx?Action=Featured&Country=Uganda";
        private const string BaseImageUrl = "http://eamobiledirectory.com/cooperp/Images/app_images/";
        private HttpClient _client = new HttpClient();
        public ObservableCollection<Adverts> adverts;

        public MainActivity()
        {
            InitializeComponent();



            TrendingShows();

            if (CrossConnectivity.Current.IsConnected)
            {

                OnAppearing();
            }


            else
            {

                App.Current.MainPage.DisplayAlert("Alert ", "No internet Connection Please", "OK");
            }






        }
    protected override async void OnAppearing()
            {

                var content = await _client.GetStringAsync(Url);
                var adv = JsonConvert.DeserializeObject<List<Adverts>>(content);

                adverts = new ObservableCollection<Adverts>(adv);



                AdvertsCarousel.ItemsSource = adverts;
                // attaching auto sliding on to carouselView 
                Device.StartTimer(TimeSpan.FromSeconds(18), () =>
                {
                    SlidePosition++;
                    if (SlidePosition == adverts.Count)
                        SlidePosition = 0;
                    AdvertsCarousel.Position = SlidePosition;
                    return true;
                });



            }

我尝试了此操作,但似乎不起作用,我该如何处理。

最佳答案

使用简单的try / catch结构,这也有助于解决可能发生的任何其他错误。或者查看Connectivity Plugin。它具有一些方法,属性和事件来确定连接的状态,然后您可以相应地处理内容。

编辑

作为您已编辑问题的跟进;您不需要自己调用OnAppearing。您可以将代码抽象为某种需要刷新数据的方法,也可以找到另一种更适合的方法。

您还应该将支票移近获取数据的位置。例如,更像这样:

protected override async void OnAppearing()
{
    adverts = new List<Adverts>();

    if (CrossConnectivity.Current.IsConnected)
    {
        var content = await _client.GetStringAsync(Url);
        var adv = JsonConvert.DeserializeObject<List<Adverts>>(content);

        adverts = new ObservableCollection<Adverts>(adv);
    }
    else
    {
        // TODO: Either show cached adverts here, or hide your carrousel or whatever you want to do when there is no connection
    }

    AdvertsCarousel.ItemsSource = adverts;

    // attaching auto sliding on to carouselView 
    Device.StartTimer(TimeSpan.FromSeconds(18), () =>
    {
        SlidePosition++;
        if (SlidePosition == adverts.Count)
            SlidePosition = 0;
        AdvertsCarousel.Position = SlidePosition;
        return true;
    });
}

关于c# - 没有互联网连接的iOS应用崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44386655/

相关文章:

c# - 数据不显示在数据网格中

c# - 需要在每个浏览器中显示相同的 Div 高度

ios - 当半透明为 True 时,以编程方式将 ViewController subview 推到导航栏下方

ios - 如何使用 Xcode 9/iOS 11 简单地使用 Twilio 发送短信?

xaml - ListView 绑定(bind)仅在滚动时更新 UI

C#接口(interface)继承

C# 从 Color 获取所有颜色

ios - 在 iOS 上导出视频 : understanding and setting frame duration property?

c# - 在 Xamarin Forms 中将字符串本地保存在设备上

Xamarin.Forms,如何使用我当前的 Xamarin.Forms 找到兼容版本的 Android 支持库