我有一个Xamarin应用,其中包含从API提取的多个数据表。目前,调用API并插入数据的代码如下:
try
{
// Table1
var table1Response = await httpClient.Value.GetStringAsync("http://website.com/api/table1");
var table1 = JsonConvert.DeserializeObject<List<Table1>>(table1Response);
using (SQLiteConnection conn = new SQLiteConnection(App.DatabaseLocation))
{
conn.CreateTable<Table1>();
conn.DeleteAll<Table1>();
conn.InsertAll(table1);
conn.Close();
}
// Table2
var table2Response = await httpClient.Value.GetStringAsync("http://website.com/api/table2");
var table2 = JsonConvert.DeserializeObject<List<Table2>>(table2Response);
using (SQLiteConnection conn = new SQLiteConnection(App.DatabaseLocation))
{
// Checks for table and creates if doesn't exist
conn.CreateTable<Table2>();
// Deletes all old data
conn.DeleteAll<Table2>();
// Updates with new reference data from API
conn.InsertAll(table2);
conn.Close();
}
// Repeats for all tables in the app.
因为它必须等待API调用,所以在应用程序的OnStart()中调用此方法时,数据将逐表加载,并且如果您导航到应用程序中需要某些尚未完成的数据的页面被调用时,显然该应用程序崩溃了。昨天我向我正在编写的要使用foreach循环以编程方式插入数据的函数寻求帮助(请参阅:Xamarin/C# - Insert data into SQLite database programmatically for multiple tables?),并被告知这不是一种聪明的方法,可以根据需要定义每个表是更好的方法
我的问题变成了,我该如何对我的API调用方法进行处理,使其一次执行多个API调用,并假设一次加载所有数据?甚至有可能做到这一点,还是我应该尝试建立一个正在加载的屏幕,等待所有数据被检索之后再允许进一步使用该应用程序?
答案 0 :(得分:0)
您可以尝试以xamarin形式使用backgrounding Service
。
后台服务通常用于以下任务: 在后台执行,例如下载文件 计算,播放音乐和定期方法调用。每个平台 在启用和注册背景方面有不同的方法 服务。
因为每个平台都有自己的后台服务方式和规则。我们必须为每个平台提供服务。
有关更多详细信息,您可以检查:
https://www.youtube.com/watch?v=Z1YzyreS4-o
https://robgibbens.com/backgrounding-with-xamarin-forms/
https://winstongubantes.blogspot.com/2018/09/backgrounding-with-xamarinforms-easy-way.html
此外,如果您想深入了解每个平台的高级后台服务,可以查看以下链接:
Android BackgroundServices LINK
iOS BackgroundServices LINK