如何在应用程序启动时从 url 加载数据
How can i load data from an url on app start
在我的 xamarin.forms 中,我需要在应用程序启动时加载数据。我知道代码必须在 App.cs
页面中。我可以在单击按钮时加载数据,现在我想在应用程序启动时加载数据。
的正确解决方案是什么
只需开始在 App.cs 的构造函数中加载数据。如果需要,您可以在后台线程上执行此操作。
Task.Run(() =>
{
// Do stuff in here
});
使用 ContinueWith 处理任何异常。
更新
根据我在下面的评论,我不推荐这种方式,使用 OnStart 是一种更好的方法。
在那里添加异步并以这种方式加载。在iOS.
的情况下,构造函数需要return和return用17秒
protected async override void OnStart()
{
}
此外,请确保在所有代码周围放置一个 try/catch,因为没有 return 例外的任务。
您可以使用 async/await,如果您需要完成下载并在您仍在使用 OnStart 方法时对您的数据执行某些操作:
protected async override void OnStart()
{
// Handle when your app starts
//retrieve your data
TypeOfDataObject dataObj = await GetMyData();
// Do stuff with your data
}
private Task<TypeOfDataObject> GetMyData()
{
//Get your data from URL
return dataObj;
}
您需要等待数据,并确保处理无法获取数据并给用户重试的机会。
我是这样操作的:
protected async override void OnStart ()
{
do
{
try
{
_data = await GetData();
}
catch(Exception e)
{
var errorMessage = e.Message; // Todo: Use nicer error message
await loadingPage.DisplayAlert ("Error", errorMessage, "RETRY");
}
} while (_data = null);
// Do stuff with _data
}
您可以在我的 DDD North Agenda App Sample.
中看到这个工作的完整示例以及显示加载页面
在我的 xamarin.forms 中,我需要在应用程序启动时加载数据。我知道代码必须在 App.cs
页面中。我可以在单击按钮时加载数据,现在我想在应用程序启动时加载数据。
只需开始在 App.cs 的构造函数中加载数据。如果需要,您可以在后台线程上执行此操作。
Task.Run(() =>
{
// Do stuff in here
});
使用 ContinueWith 处理任何异常。
更新
根据我在下面的评论,我不推荐这种方式,使用 OnStart 是一种更好的方法。
在那里添加异步并以这种方式加载。在iOS.
的情况下,构造函数需要return和return用17秒protected async override void OnStart()
{
}
此外,请确保在所有代码周围放置一个 try/catch,因为没有 return 例外的任务。
您可以使用 async/await,如果您需要完成下载并在您仍在使用 OnStart 方法时对您的数据执行某些操作:
protected async override void OnStart()
{
// Handle when your app starts
//retrieve your data
TypeOfDataObject dataObj = await GetMyData();
// Do stuff with your data
}
private Task<TypeOfDataObject> GetMyData()
{
//Get your data from URL
return dataObj;
}
您需要等待数据,并确保处理无法获取数据并给用户重试的机会。
我是这样操作的:
protected async override void OnStart ()
{
do
{
try
{
_data = await GetData();
}
catch(Exception e)
{
var errorMessage = e.Message; // Todo: Use nicer error message
await loadingPage.DisplayAlert ("Error", errorMessage, "RETRY");
}
} while (_data = null);
// Do stuff with _data
}
您可以在我的 DDD North Agenda App Sample.
中看到这个工作的完整示例以及显示加载页面