Issue
I am connecting my xamarin app to firebase, I created a full CRUD function and implemented it to my app.
I think I did everything right, but apperantly I did not because the UPDATE and DELETE functions does not really work..
I can Add items to the database but not UPDATE or DELETE them. When I try to uppdate or delete an item I get error on my update and delete functions.
This is my FirebaseHelper.cs that contains all the CRUD functions:
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();
}
}
}
The error I get is in DeletePerson class is in the last line: **await firebase.Child("Persons").Child(toDeletePerson.Key).DeleteAsync();**
The error I get in UpdatePerson class is also in last line
await firebase
.Child("Persons")
.Child(toUpdatePerson.Key)
.PutAsync(new Person() { PersonId = personId, Name = name });
Both functions gives me this error:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
Hope someone can help!
Solution
if this query is returning null
var toDeletePerson = (await firebase
.Child("Persons")
.OnceAsync<Person>()).Where(a => a.Object.PersonId == personId).FirstOrDefault();
then this will throw a null reference exception
await firebase.Child("Persons").Child(toDeletePerson.Key).DeleteAsync();
you should test for null first
if (toDeletePerson != null)
{
await firebase.Child("Persons").Child(toDeletePerson.Key).DeleteAsync();
}
Answered By - Jason
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.