簡體   English   中英

沒有互聯網連接的iOS應用崩潰

[英]App crashes on iOS with no internet connection

我正在使用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結構,這也有助於解決可能發生的任何其他錯誤。 或查看連接插件 它具有一些方法,屬性和事件來確定連接的狀態,然后您可以相應地處理內容。

編輯

作為您已編輯問題的跟進; 您不需要自己呼叫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;
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM