这是我的第一个堆栈溢出问题,因此对不起,如果格式错误。我一直在尝试将Xamarin.Forms与Firebase实时数据库结合使用,但无法正确接收数据。我不断收到以下异常。
(我不知道如何链接本地图像,所以这是异常消息):
Unhandled Exception:
Firebase.Database.FirebaseException: Exception occured while processing the request.
Url: https://MY_DATABASE_LINK/users/user_name1/.json
Request Data:
Response: {"age":"Age_Val1","fName":"First_Val1","lName":"Last_Val1"}
我将Xamarin与NuGet包FirebaseDatabase.net一起使用,并一直在尝试遵循以下教程和在线问题:
https://forums.xamarin.com/discussion/80017/firebase-database-query
我尝试使用这两种技术,并且引发了相同的异常。看来数据库正在向我发送正确的格式为JSON的数据,但我的代码无法反序列化它。这是我的JSON数据库结构,以及我尝试运行的代码-
FirebaseHelper.cs:
public class FirebaseHelper
{
FirebaseClient firebase = new FirebaseClient("https://MY_DATABASE_LINK.firebaseio.com/");
public async Task<List<Person>> GetAllPersons()
{
return (await firebase
.Child("users")
.Child("user_name1")
.OnceAsync<Person>()).Select(item => new Person
{
FName = item.Object.FName,
LName = item.Object.LName,
Age = item.Object.Age
}).ToList();
}
}
Person.cs:
public class Person
{
public string FName { get; set; }
public string LName { get; set; }
public string Age { get; set; }
}
JSON Database Structure:
{
"users" : {
"user_name1" : {
"age" : "Age_Val1",
"fName" : "First_Val1",
"lName" : "Last_Val1"
},
"user_name2" : {
"age" : "Age_Val2",
"fName" : "First_Val2",
"lName" : "Last_Val2"
},
"user_name3" : {
"age" : "Age_Val3",
"fName" : "First_Val3",
"lName" : "Last_Val3"
}
}
}
Alt code tested:
List<Person> list_users = new List<Person>();
string[] ss = new string[] { "it", "succeeded" };
var items = await firebase
.Child("users")
.OrderByKey()
.OnceAsync<Person>();
foreach (var item in items)
{
Person user = new Person
{
FName = item.Object.FName,
LName = item.Object.LName,
Age = item.Object.Age
};
list_users.Add(user);
}
return list_users;
我希望异步void从JSON对象“ user_name1”中检索所有对象/数据,并将它们分别分配给“ Person.cs”中的变量,然后创建第一个用户的单个长度列表。
我也仅使用Child(“ users”)进行了此操作,它返回了一个较大的JSON对象,但仍然引发了异常(本来希望有长度为3的用户列表)
我只是想知道为什么会引发此异常?或者,如果我尝试错误地读取和分配数据,如果是这样,我应该如何正确地做到这一点?
答案 0 :(得分:0)
来自您的Person.cs
:
public class Person
{
public string FName { get; set; }
public string LName { get; set; }
public string Age { get; set; }
}
然后FirebaseHelper.cs
至少应该像这样:
public class FirebaseHelper
{
FirebaseClient firebase = new FirebaseClient("https://MY_DATABASE_LINK.firebaseio.com/");
public async Task<List<Person>> GetAllPersons()
{
return (await firebase
.Child("<table_name>") // should only be your table name,here should be 'users'
.OnceAsync<Person>()).Select(item => new Person
{
FName = item.Object.FName,
LName = item.Object.LName,
Age = item.Object.Age
}).ToList();
}
}
最后,请他人注意:
FirebaseHelper firebaseHelper = new FirebaseHelper();
var allPersons = await firebaseHelper.GetAllPersons();
如果还有其他问题,可以显示firebase数据库的table_name屏幕截图。