xamarin - 使用 Xamarin 在我的 db Slite 中插入寄存器,错误
问题描述
我将此数据插入到我的 Sqlite Db 中,但是当我单击按钮时,应用程序会立即关闭
private List<Tick> _tick;
public List<Tick> Tick
{
get { return _tick; }
set
{
_tick = value;
RaisePropertyChanged();
}
}
private string _title;
public string Titulo
{
get { return _title; }
set
{
_title = value;
RaisePropertyChanged();
}
}
private string _description;
public string Description
{
get { return _description; }
set
{
_description = value;
RaisePropertyChanged();
}
}
这是方法
public ICommand SaveCommand => new Command(async () => await AddTiket());
private async Task AddTiket()
{
Tick ticks = new Tick
{
Titulo = Titulo,
Description = Description
};
App.CustomerRepository.AddOrUpdate(ticks);
Console.WriteLine(App.CustomerRepository.StatusMessage);
}
CustomerRepository 是我拥有所有方法的地方,当 StatusMessage 存储在数据库中时,它会在控制台中向我发送一条消息。
我只是显示他们的标题和描述,这样代码就不会那么长了谢谢你的帮助,我正在学习。
解决方案
根据您的描述,您没有在 AddTiket 事件中使用Await
for 。App.CustomerRepository.AddOrUpdate(ticks);
您想将 Tick 记录添加到 sqlite 中,看不到CustomerRepository class
,但我做了一个简单的示例,您可以看看。
public class SQLiteHelper
{
SQLiteAsyncConnection db;
public SQLiteHelper(string dbPath)
{
db = new SQLiteAsyncConnection(dbPath);
db.CreateTableAsync<Tick>().Wait();
}
//Insert and Update new record
public Task<int> SaveItemAsync(Tick tick)
{
if (tick.Id != 0)
{
return db.UpdateAsync(tick);
}
else
{
return db.InsertAsync(tick);
}
}
//Delete
public Task<int> DeleteItemAsync(Tick tick)
{
return db.DeleteAsync(tick);
}
//Read All Items
public Task<List<Tick>> GetItemsAsync()
{
return db.Table<Tick>().ToListAsync();
}
//Read Item
public Task<Tick> GetItemAsync(int Id)
{
return db.Table<Tick>().Where(i => i.Id == Id).FirstOrDefaultAsync();
}
}
在 App.xaml.cs 中创建静态 SQLiteHelper
public partial class App : Application
{
static SQLiteHelper db;
public static SQLiteHelper SQLiteDb
{
get
{
if (db == null)
{
db = new SQLiteHelper(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Tickdb.db3"));
}
return db;
}
}
public App()
{
InitializeComponent();
向 sqlite 添加数据,在 ListView 中显示所有数据。
<StackLayout>
<Button
x:Name="btn1"
Command="{Binding SaveCommand}"
Text="add tick" />
<ListView x:Name="listview1" ItemsSource="{Binding ticks}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Text="{Binding Titulo}" />
<Label Text="{Binding Description}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
public partial class Page5 : ContentPage
{
public ICommand SaveCommand => new Command(async () => await AddTiket());
private ObservableCollection<Tick> _ticks;
public ObservableCollection<Tick> ticks
{
get { return _ticks; }
set
{
_ticks = value;
OnPropertyChanged("ticks");
}
}
public Page5()
{
InitializeComponent();
this.BindingContext = this;
}
private async Task AddTiket()
{
Tick tick = new Tick()
{
Titulo = "title 1",
Description = "this is description 1"
};
await App.SQLiteDb.SaveItemAsync(tick);
var tickList = await App.SQLiteDb.GetItemsAsync();
if (tickList != null)
{
ticks = new ObservableCollection<Tick>(tickList);
}
}
protected async override void OnAppearing()
{
base.OnAppearing();
//Get All Persons
var tickList = await App.SQLiteDb.GetItemsAsync();
if(tickList!=null)
{
ticks = new ObservableCollection<Tick>(tickList);
}
}
}
public class Tick
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Titulo { get; set; }
public string Description { get; set; }
}
推荐阅读
- android - 我有一个问题:RecyclerView 在滚动时显示错误的数据
- reactjs - 嗨,使用 facebook 或 google 登录凭据登录后,如何将用户电子邮件和用户名传递给其他组件
- php - 展平正则表达式数组
- c# - 当 Bitmap 被缩放时,它是这样的
- excel - 通过 VBA 将目录中的所有 XML 文件转换为 XLS
- javascript - 将参数附加到数组并评估每个数组元素
- typescript - “属性或方法“foo”未在实例上定义,但在渲染期间被引用”Vuejs Typescript
- git - 合并 Git 存储库,保留历史记录和参考
- php - 如何在heroku上成功安装firebase?
- css - CSS中标题标签的每个单词的第一个字母大一点