Firebase 实时数据库在 Xamarin 上检索了单个数据 Android
Firebase Realtime Database Retrieved Single Data on Xamarin Android
当我在 OndataChange 上放置断点时,我成功地从实时数据库 firebase 获取数据,但是当我在 OnDataChange 方法之后放置断点时,记录现在为空。
public void OnDataChange(DataSnapshot dataSnapshot)
{
if (dataSnapshot.Value != null)
{
reclist.Clear();
TempDB rec = new TempDB();
rec.ID = dataSnapshot.Key;
rec.Firstname = dataSnapshot.Child("FirstName").Value.ToString();
rec.Lastname = dataSnapshot.Child("LastName").Value.ToString();
rec.Address = dataSnapshot.Child("Address").Value.ToString();
rec.ContactNo = dataSnapshot.Child("Contact number").Value.ToString();
rec.Email = dataSnapshot.Child("EmailAddress").Value.ToString();
rec.Password = dataSnapshot.Child("Password").Value.ToString();
idd = rec.ID;
Console.WriteLine(id.ToString());
reclist.Add(rec);
}
}
那是因为数据是从 Firebase 异步加载的,而您的其余代码仍在继续。然后一旦数据被加载,你的 onDataChange
就会被调用。这意味着您共享的代码确实在 onDataChange
内的代码之前运行,并且按预期工作。
解决方案始终相同:任何需要数据库数据的代码都需要在 onDataChange
内部,从那里调用,或者以其他方式同步。
查看这两个 (Android) 示例以获得一些想法:
当我在 OndataChange 上放置断点时,我成功地从实时数据库 firebase 获取数据,但是当我在 OnDataChange 方法之后放置断点时,记录现在为空。
public void OnDataChange(DataSnapshot dataSnapshot)
{
if (dataSnapshot.Value != null)
{
reclist.Clear();
TempDB rec = new TempDB();
rec.ID = dataSnapshot.Key;
rec.Firstname = dataSnapshot.Child("FirstName").Value.ToString();
rec.Lastname = dataSnapshot.Child("LastName").Value.ToString();
rec.Address = dataSnapshot.Child("Address").Value.ToString();
rec.ContactNo = dataSnapshot.Child("Contact number").Value.ToString();
rec.Email = dataSnapshot.Child("EmailAddress").Value.ToString();
rec.Password = dataSnapshot.Child("Password").Value.ToString();
idd = rec.ID;
Console.WriteLine(id.ToString());
reclist.Add(rec);
}
}
那是因为数据是从 Firebase 异步加载的,而您的其余代码仍在继续。然后一旦数据被加载,你的 onDataChange
就会被调用。这意味着您共享的代码确实在 onDataChange
内的代码之前运行,并且按预期工作。
解决方案始终相同:任何需要数据库数据的代码都需要在 onDataChange
内部,从那里调用,或者以其他方式同步。
查看这两个 (Android) 示例以获得一些想法: