更新firebase实时数据库xamarin表单中的单个数据
我正在使用Firebase实时数据库,我想修改单个数据 以下是我的数据库的Json:更新firebase实时数据库xamarin表单中的单个数据,firebase,firebase-realtime-database,xamarin.forms,updates,Firebase,Firebase Realtime Database,Xamarin.forms,Updates,我正在使用Firebase实时数据库,我想修改单个数据 以下是我的数据库的Json: "Users" : { "h31QEhvv4pdzbyqHkwyrd8MI5Fu2" : { "Books" : { "codebook0" : { "Author" : "De Amicis", "Cove
"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();
}
公共异步任务getReaders()
{
返回(等待火力基地)
.Child(“用户”)
.Child(auth.CurrentUser())
.儿童(“书籍”)
.OrderBy(“状态”)
.EqualTo(“阅读”)
.OnceAsync())。选择(项=>
新用户{
Title=item.Object.Title,
Author=item.Object.Author,
流派=item.Object.Genre,
封面=item.Object.Cover
}).ToList();
}
现在,我在单个viewcell中有一个按钮,单击它,我想将图书状态更改为“已读”
我试着这样做:
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");
}
公共异步任务更新状态(字符串状态)
{
var toUpdateStatus=(等待firebase
.Child(“用户”)
.Child(auth.CurrentUser())
.儿童(“书籍”)
.OnceAsync())。其中(a=>a.Object.Status==Status);
等待火力基地
.Child(“用户”)
.Child(auth.CurrentUser())
.儿童(“书籍”)
.Child(toUpdateStatus.Key)
.PutAsync(新用户(){Status=Status});
}
私有异步void ReadClicked(对象发送方,事件参数e)
{
按钮btn=(按钮)发送器;
var book=(utinte)btn.BindingContext;
var状态=账面状态;
等待更新状态(“读取”);
}
但是,很明显,它不起作用。有什么想法吗?DB 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);
}
public async Task UpdateStatus(字符串oldStatus,字符串newStatus)
{
var toUpdateStatus=(等待firebase
.Child(“用户”)
.Child(“h31qehv4pdzbyqhkwyrd8mi5fu2”)
.儿童(“书籍”)
.OnceAsync())。其中(a=>a.Object.Status==oldStatus);
toUpdateStatus.Object.Status=newStatus;
等待火力基地
.Child(“用户”)
.Child(“h31qehv4pdzbyqhkwyrd8mi5fu2”)
.儿童(“书籍”)
.Child(toUpdateStatus.Key)
.PutAsync(toUpdateStatus.Object);
}
谢谢您的回答!不幸的是,它无法工作,它在.Child(toUpdateStatus.Key)row.var status=book.status处为我提供了NullReferenceException。检查状态值。它应该是“Reading”,并检查auth.CurrentUser()应该是“H311QEv4PDZBYQHKWYRD8MI5FU2”,根据您发布的json。它不会给出NullReferenceException。我检查过了。是的,不应该,但它确实检查过。我就是这样做的,它给了我toUpdateStatus.Key的异常,就像它在itI中什么都没有一样。我更新了我的答案。我在firebase数据库中创建了与我的答案(与您的答案相同)相同的Json数据,并调用了UpdateStatus方法,数据库中的值正在更新。