我使用SQLite数据库使用TodoItems的通用列表填充listview:
ListView.ItemsSource = await App.Database.GetItemsAsync("SELECT * FROM [TodoItem]");
我可以使用HttpClient类从数据库源读取同类数据,也可以通过
public async Task<List<TodoItem>> ReadDataAsync ()
....
Items = new List<TodoItem> ();
....
var content = await response.Content.ReadAsStringAsync ();
Items = JsonConvert.DeserializeObject <List<TodoItem>> (content);
....
return Items;
此后我也可以将其用作数据源:
ListView.ItemsSource = await App.ReadDataAsync();
两种方式都运作良好。
我现在想要的是结合两个例程来完成检查我们是否有在线连接的代码,如果是,则删除数据库并使用上面的ReadDataAsync结果填充它,如果不是,请保持数据库不变。
我发现没有办法直接将List分配给我的数据库,覆盖整个内容,我想到的是:
App.Database.Items = await App.ReadDataAsync();
但SQLite似乎没有直接公开数据存储。我怎么能做到这一点?
答案 0 :(得分:0)
例如,对于android
,您可以尝试:无需删除数据库。
//Check for internet connection
var connectivityManager =
(ConnectivityManager)this.GetSystemService("connectivity");
var activeConnection = connectivityManager.ActiveNetworkInfo;
if ((activeConnection != null) && activeConnection.IsConnected)
{
//Make call to the API
var list = await App.ReadDataAsync();
//Update or Insert local records
foreach (var item in list)
{
var success = UpdateOrInsert(item);
//Do something after - like retry incase of failure
}
}
UpdatedOrInsert
方法可能如下所示:
private bool UpdateOrInsert(TodoItem item)
{
var rowsAffected = App.Database.Update(item);
if (rowsAffected == 0)
{
// The item doesn't exist in the database, therefore insert it
rowsAffected = App.Database.Insert(item);
}
var success = rowsAffected > 0;
return success;
}