C# 表单下载数据OnStart()或OnAppearing()
在我的Xaman表单应用程序中,我需要下载一个json文件来填充列表视图。 我首先检查互联网是否正常,然后下载带有动画页面的json文件 我把app.cs放进去了C# 表单下载数据OnStart()或OnAppearing(),c#,xamarin.forms,xamarin-forms-4,C#,Xamarin.forms,Xamarin Forms 4,在我的Xaman表单应用程序中,我需要下载一个json文件来填充列表视图。 我首先检查互联网是否正常,然后下载带有动画页面的json文件 我把app.cs放进去了 public App() { InitializeComponent(); MainPage = new NavigationPage(new AnimatePage()); } protected override
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;
}
在OnStart上这样做是好的还是在Ui OnAppearing()中这样做更好?
我这样做只是为了尽可能地开始下载,但我如何知道在AnimaPage文件中下载并打开主页?我会在AnimatePage OnAppearing()中这样做,这样可以更清楚地了解应该发生的事情。现在在App()构造函数中,您已经设置了MainPage,它将在该页面的appearing()上运行,大约与应用的OnStart()方法相同。它们是由两个不同的线程启动的。如果只有一秒钟的差异,那么在appearing()上做任何事情都会更容易:)
protected override async void OnAppearing()
{
base.OnAppearing();
label.Text = "Loading ....";
await Navigation.PushAsync(new MainPage());
}