提问人: 提问时间:2/24/2021 最后编辑:Frank van Puffelen 更新时间:2/24/2021 访问量:185
Xamarin Firebase 连接中的 NullReferenceException
NullReferenceException in Xamarin Firebase connection
问:
我正在将我的 xamarin 应用程序连接到 firebase,我创建了一个完整的 CRUD 函数并将其实现到我的应用程序中。
我认为我做的一切都是正确的,但实际上我没有,因为 UPDATE 和 DELETE 功能并没有真正起作用。
我可以将项目添加到数据库,但不能更新或删除它们。当我尝试更新或删除项目时,我的更新和删除功能出现错误。
这是我的FirebaseHelper.cs,其中包含所有CRUD函数:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Firebase.Database;
using Firebase.Database.Query;
namespace ElseWareApp.Models
{
public class FirebaseHelper
{
FirebaseClient firebase = new FirebaseClient("https://urldb-4fcca-default-rtdb.firebaseio.com/");
public async Task<List<Person>> GetAllPersons()
{
return (await firebase
.Child("Persons")
.OnceAsync<Person>()).Select(item => new Person
{
Name = item.Object.Name,
PersonId = item.Object.PersonId
}).ToList();
}
public async Task AddPerson(int personId, string name)
{
await firebase
.Child("Persons")
.PostAsync(new Person() { PersonId = personId, Name = name });
}
public async Task<Person> GetPerson(int personId)
{
var allPersons = await GetAllPersons();
await firebase
.Child("Persons")
.OnceAsync<Person>();
return allPersons.Where(a => a.PersonId == personId).FirstOrDefault();
}
public async Task UpdatePerson(int personId, string name)
{
var toUpdatePerson = (await firebase
.Child("Persons")
.OnceAsync<Person>()).Where(a => a.Object.PersonId == personId).FirstOrDefault();
await firebase
.Child("Persons")
.Child(toUpdatePerson.Key)
.PutAsync(new Person() { PersonId = personId, Name = name });
}
public async Task DeletePerson(int personId)
{
var toDeletePerson = (await firebase
.Child("Persons")
.OnceAsync<Person>()).Where(a => a.Object.PersonId == personId).FirstOrDefault();
await firebase.Child("Persons").Child(toDeletePerson.Key).DeleteAsync();
}
}
}
我得到的错误是在 DeletePerson 类的最后一行:**await firebase.Child("Persons").Child(toDeletePerson.Key).DeleteAsync();**
我在UpdatePerson类中得到的错误也在最后一行
await firebase
.Child("Persons")
.Child(toUpdatePerson.Key)
.PutAsync(new Person() { PersonId = personId, Name = name });
这两个函数都给了我这个错误:
System.NullReferenceException:“对象引用未设置为对象的实例。
希望有人能帮忙!
答:
1赞
Jason
2/24/2021
#1
如果此查询返回 null
var toDeletePerson = (await firebase
.Child("Persons")
.OnceAsync<Person>()).Where(a => a.Object.PersonId == personId).FirstOrDefault();
那么这将引发一个 null 引用异常
await firebase.Child("Persons").Child(toDeletePerson.Key).DeleteAsync();
应首先测试 null
if (toDeletePerson != null)
{
await firebase.Child("Persons").Child(toDeletePerson.Key).DeleteAsync();
}
评论
0赞
2/24/2021
当我调试时,personId = 0,这很奇怪,因为我的数据库中没有 0
0赞
Jason
2/24/2021
那么你应该调试它 - 该值最初是从哪里传递的?它是如何设置为无效值的?等。。。
评论
Console.WriteLine