当我在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
内部,从那里调用,或者以其他方式同步。
看看这两个(安卓(例子,了解一些想法:
- getContactsFromFirebase((方法返回一个空列表
- 在Firebase Listener中设置Singleton属性值