0

在我的 Xamain Forms 应用程序中,我需要下载一个 json 文件来填充列表视图。我首先检查互联网是否正常,然后下载带有动画页面的 json 文件。

我把 app.cs

  public App()
            {
                InitializeComponent();
            MainPage = new NavigationPage(new AnimatePage());
            }

    protected override async void OnStart()
            {
                var isConnected = await CheckForInternetConnectionAsync();
                if (isConnected)
                {
                     await DownloadjsonAsync();                
             }
                else
                {
                    //internet down
                }
            }
        private static async Task<bool> CheckForInternetConnectionAsync()
        {
            using (var tokSource = new CancellationTokenSource(5000))
            {
                try
                {
                    await _httpClient.GetAsync("http://google.com/generate_204", tokSource.Token);
                }
                catch (OperationCanceledException)
                {
                    return false;
                }
                catch (Exception e)
                {

                    return false;

                }
            }
            return true;
        }
private static async Task<bool> DownloadjsonAsync()
        {
            using (var tokSource = new CancellationTokenSource(5000))
            {
                try
                {
                    

                    var response = await _httpClient.GetAsync("http://url/file.json", tokSource.Token);
                    using (var stream = await response.Content.ReadAsStreamAsync())
                    {
                        var localFolder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData);
                        var newpath = Path.Combine(localFolder, "milka.json");
                        var fileInfo = new FileInfo(newpath);
                        using (var fileStream = fileInfo.OpenWrite())
                        {
                            await stream.CopyToAsync(fileStream);
                        }
                    }
                }
                catch (OperationCanceledException)
                {
                    return false;
                }
                catch (Exception e)
                {

                    return false;

                }
            }
            return true;
        }

在 AnimatePage 中:

protected override async void OnAppearing()
        {
           base.OnAppearing();
           label.Text = "Loading ....";
            
          await Navigation.PushAsync(new MainPage());
        }

在 OnStart 上执行此操作好还是在 Ui OnAppearing() 中执行此操作更好?我刚刚这样做是为了尽可能开始下载,但我怎么知道在 AnimaPage 文件中下载并打开 mainPage?

4

0 回答 0