繁体   English   中英

是否可以在启动时显示DisplayAlert(Xamarin.Forms)

[英]Is it possible to show DisplayAlert on startup (Xamarin.Forms)

在我的移动应用程序(xamarin表单)中,我从互联网获取数据,因此需要互联网连接。 由于我有一个字典,我在App.xaml.cs初始化,我使用互联网数据,我需要检查互联网连接。 我已经看到这个问题OP请求类似的东西,但答案对我不起作用,因为我需要在应用程序启动时检查互联网连接,而不是在MainPage启动后。 例如,Clash of Clans。 每当应用程序启动时,应用程序都会检查互联网连接,如果没有连接,它会重复向用户显示警报,直到有连接。

在此输入图像描述

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表单应用程序中出现此行为? 我怎样才能实现它?

是的,为什么不可能呢?

这是一个使用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
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM