Можно ли показать DisplayAlert при запуске (Xamarin.Forms) - PullRequest
0 голосов
/ 15 сентября 2018

В моем мобильном приложении (формы xamarin) я получаю данные из Интернета, поэтому для этого требуется подключение к Интернету. Поскольку у меня есть словарь, который я инициализирую в App.xaml.cs и использую данные из Интернета, мне нужно проверить подключение к Интернету. Я видел этот вопрос, где OP запрашивает нечто подобное, но ответ не работает для меня, поскольку мне нужно проверять подключение к Интернету при каждом запуске приложения, а не после запуска MainPage. Например, Clash of Clans. Каждый раз, когда приложение запускается, оно проверяет подключение к Интернету и, если оно отсутствует, оно периодически отображает предупреждение для пользователя, пока оно не будет установлено.

enter image description here

using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using System.Collections.Generic;
using HtmlAgilityPack;
using System.Text.RegularExpressions;
using System;

[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
namespace Multi
{
    public partial class App : Application
    {
        static GroupStage groupstage = new GroupStage();

        public static HtmlWeb web = new HtmlWeb();
        public static HtmlDocument doc = LoadUrlAndTestConnection();

        //The reason why I have put a method is because I wanted to try if I can use try-catch to display alert, however this didn't work.  
        public static HtmlDocument LoadUrlAndTestConnection()
        {
            bool con = true;
            while (con)
            {
                try
                {
                    doc = web.Load(someURL);
                }
                catch (Exception ex)
                {
                    var sth = new ErrorPage();
                    sth.InternetErrorDisplay();
                    con = true;
                    continue;
                }
                con = false;
            }
            return docSK;
        }

        public static Dictionary<string, Country> _countries = new Dictionary<string, Country>
        {
            ["Australia"] = new Country(1, "Australia", false, "AU", "ausFlag.png", 3, groupstage, GetScore("Australia", 3)),

        public static string[] GetScore(string name, int GroupID)
        {
            //Gets the score data from internet
        }

        public App()
        {
            InitializeComponent();

            TwitchClass.MainAsync().Wait();

            MainPage = new OpeningPage();
        }

        protected override void OnStart()
        {

        }

        protected override void OnSleep()
        {

        }

        protected override void OnResume()
        {

        }
    }
}

    //GetScore method requires internet connection as it gets the score data from internet.

, а метод InternetErrorDisplay -

public void InternetErrorDisplay() => DisplayAlert("Connection Error", "Could not detect internet connection. This application requires access to internet.", "Retry");

Возможно ли такое поведение в приложении xamarin forms? Как мне этого добиться?

1 Ответ

0 голосов
/ 15 сентября 2018

Да, почему это не должно быть возможно?

Вот пример, который использует async / await

using System;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using System.Threading.Tasks;

[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
namespace LoadingSample
{
    public partial class App : Application
    {
        public App()
        {
            InitializeComponent();

            //MainPage = new MainPage();
        }

        protected override async void OnStart()
        {
            // shows Loading...
            MainPage = new LoadPage();

            await Task.Yield();
            // Handle when your app starts

            // Just a simulation with 10 tries to get the data
            for (int i = 0; i < 10; i++)
            {
                await Task.Delay(500);
                // await internet_service.InitializeAsync();
                await MainPage.DisplayAlert(
                    "Connection Error", 
                    "Unable to connect with the server. Check your internet connection and try again", 
                    "Try again");            
            }
            await Task.Delay(2000);
            // after loading is complete show the real page
            MainPage = new MainPage();
        }

        protected override void OnSleep()
        {
            // Handle when your app sleeps
        }

        protected override void OnResume()
        {
            // Handle when your app resumes
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...