从通用 "list of items" 填充 SQLite 数据库
Populate SQLite database from generic "list of items"
我使用 SQLite 数据库用 TodoItems 的通用列表填充列表视图:
ListView.ItemsSource = await App.Database.GetItemsAsync("SELECT * FROM [TodoItem]");
我可以使用 HttpClient class 以及通过
从数据库源读取同类数据
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 的结果填充它,如果没有,则保留数据库.
我发现没有办法直接将列表分配到我的数据库,覆盖所有内容,我想到了这样的事情:
App.Database.Items = await App.ReadDataAsync();
但 SQLite 似乎没有直接公开数据存储。我怎样才能做到这一点?
例如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;
}
我使用 SQLite 数据库用 TodoItems 的通用列表填充列表视图:
ListView.ItemsSource = await App.Database.GetItemsAsync("SELECT * FROM [TodoItem]");
我可以使用 HttpClient class 以及通过
从数据库源读取同类数据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 的结果填充它,如果没有,则保留数据库.
我发现没有办法直接将列表分配到我的数据库,覆盖所有内容,我想到了这样的事情:
App.Database.Items = await App.ReadDataAsync();
但 SQLite 似乎没有直接公开数据存储。我怎样才能做到这一点?
例如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;
}