在我的 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?