firebase - 更新firebase实时数据库xamarin表单中的单个数据
问题描述
我正在使用 Firebase 实时数据库,我想修改单个数据。
这是我的数据库的 Json:
"Users" : {
"h31QEhvv4pdzbyqHkwyrd8MI5Fu2" : {
"Books" : {
"codebook0" : {
"Author" : "De Amicis",
"Cover" : "https://firebasestorage.googleapis.com....",
"Genre" : "Children",
"Status" : "Reading",
"Title" : "Cuore"
}
我用这种方法在列表视图中检索阅读书籍:
public async Task<List<User>> GetReadings()
{
return (await firebase
.Child("Users")
.Child(auth.CurrentUser())
.Child("Books")
.OrderBy("Status")
.EqualTo("Reading")
.OnceAsync<User>()).Select(item =>
new User {
Title = item.Object.Title,
Author = item.Object.Author,
Genre = item.Object.Genre,
Cover = item.Object.Cover
}).ToList();
}
现在我在单个视单元中有一个按钮,通过单击它,我想将图书状态更改为“已读”。
我试过这样:
public async Task UpdateStatus(string status)
{
var toUpdateStatus = (await firebase
.Child("Users")
.Child(auth.CurrentUser())
.Child("Books")
.OnceAsync<User>()).Where(a => a.Object.Status == status).FirstOrDefault();
await firebase
.Child("Users")
.Child(auth.CurrentUser())
.Child("Books")
.Child(toUpdateStatus.Key)
.PutAsync(new User() { Status = status });
}
private async void ReadClicked(object sender, EventArgs e)
{
Button btn = (Button)sender;
var book = (Utente)btn.BindingContext;
var status = book.Status;
await UpdateStatus("read");
}
但是,显然,它不起作用。任何想法?
解决方案
数据库 JSON
{
"Users" : {
"h31QEhvv4pdzbyqHkwyrd8MI5Fu2" : {
"Books" : {
"codebook0" : {
"Status" : "Reading",
"Title" : "abc"
},
"codebook1" : {
"Status" : "Reading",
"Title" : "sdf"
}
}
}
}
}
您必须同时通过旧状态和新状态。
await UpdateStatus("Reading","read");
现在 UpdateStatus 方法是
public async Task UpdateStatus(string oldStatus, string newStatus)
{
var toUpdateStatus = (await firebase
.Child("Users")
.Child("h31QEhvv4pdzbyqHkwyrd8MI5Fu2")
.Child("Books")
.OnceAsync<User>()).Where(a => a.Object.Status == oldStatus).FirstOrDefault();
toUpdateStatus.Object.Status = newStatus;
await firebase
.Child("Users")
.Child("h31QEhvv4pdzbyqHkwyrd8MI5Fu2")
.Child("Books")
.Child(toUpdateStatus.Key)
.PutAsync(toUpdateStatus.Object);
}
推荐阅读
- python - Python中的类继承与动态生成的方法
- mongodb - Mongodb - 根据数组元素查找查询
- azure - 存储队列服务上的 ARM 模板错误作为可选参数
- sql - 如果在 postgres 中找不到记录,如何设置默认值
- python - 在 QtreeWidget 中拖动 Qframe
- php - 如何在 php-ffmpeg 中提高 ffmpeg 添加水印的速度?
- python - 将参数传递给 super().__init__ 的优雅方式,同时将其名称保留在签名中?
- c - CS50 恢复 - 为什么我不断收到分段错误?
- python - 如何摆脱最后一列中的零
- amazon-web-services - 跨多个 EC2 实例的 buildManifest 上的 Nextjs 404s