我想在我的数据库中获取数据的项密钥,但正如您在DataSnapshot函数中看到的那样,我调用try来获取项密钥但它返回空。我正在尝试将所有项密钥绑定到我的数据提取。因此,每个获取的项目都应该包含其中的密钥,以便我可以使用密钥。但是,除了项密钥之外,所有其他元素都被取出。为什么项目键没有显示?谢谢你的帮助
结构
模型
public Hero(string uid,string name, string achievment, string history, string quote)
{
this.uid = uid;
this.name = name;
this.achvievment = achievment;
this.history = history;
this.quote = quote;
}
public HashMap ToMap()
{
HashMap map = new HashMap();
map.Put("Uid", this.uid);
map.Put("Name", this.name);
map.Put("Achievement", this.achvievment);
map.Put("History", this.history);
map.Put("Quote", this.quote);
return map;
}
public string Uid
{
get { return uid; }
set { uid = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
public int Image
{
get { return image; }
set { image = value; }
}
public string Achievement
{
get { return achvievment; }
set { achvievment = value; }
}
public string History
{
get { return history; }
set { history = value; }
}
public string Quote
{
get { return quote; }
set { quote = value; }
}
保存数据
//this is how i save my data which works fine
mHero.Push().SetValue(new PeaceHero(user.Uid,HeroName.Text, HeroAchv.Text, HeroHistory.Text, HeroQuote.Text).ToMap());
获取数据
public void OnDataChange(DataSnapshot snapshot)
{
var items = snapshot.Children?.ToEnumerable<DataSnapshot>();
HashMap map;
foreach (DataSnapshot item in items)
{
map = (HashMap)item.Value;
Hero.Add(new Hero(map.Get(item.Key)?.ToString(),map.Get("Name")?.ToString(), map.Get("Achievement")?.ToString(),map.Get("History")?.ToString(),map.Get("Quote")?.ToString()));
Console.WriteLine("Sending item key" +item.Key.ToString());
key = item.Key;
}
HeroAdapter adapter = new PeaceHeroAdapter(Hero,this);
Console.Write("The key is "+key);
}
答案 0 :(得分:0)
我不确定item.Key应该是什么,但你的Hero构造函数应该是:
Hero.Add(new Hero(map.Get(""Uid"")?.ToString(),map.Get("Name")?.ToString(), map.Get("Achievement")?.ToString(),map.Get("History")?.ToString(),map.Get("Quote")?.ToString()));
答案 1 :(得分:0)
您没有获得密钥的原因是因为您正在错误的数据快照中查找它。
而不是以下内容: -
public void OnDataChange(DataSnapshot snapshot)
{
var items = snapshot.Children?.ToEnumerable<DataSnapshot>();
HashMap map;
foreach (DataSnapshot item in items)
{
key = item.Key
....
使用: -
public void OnDataChange(DataSnapshot snapshot)
{
var items = snapshot.Children?.ToEnumerable<DataSnapshot>();
var key = snapshot.Key
HashMap map;
foreach (DataSnapshot item in items)
{
....
这里的逻辑是当你调用foreach(Datasnapshot item in items)
时,你会遍历父Datasnapshot的子节点。而不是这个,您需要使用onDataChange(Datasnapshot snapshot)
方法获得的数据快照的密钥。这是snapshot
。因此,您应该在.Key
上致电snapshot
。
答案 2 :(得分:0)
好。我找到了答案。这可能会在将来帮助某人。
public void OnDataChange(DataSnapshot snapshot)
{
var items = snapshot.Children?.ToEnumerable<DataSnapshot>();
HashMap map;
foreach (DataSnapshot item in items)
{
map = (HashMap)item.Value;
Hero.Add(new Hero(item.Key.ToString(),map.Get("Name")?.ToString(), map.Get("Achievement")?.ToString(),map.Get("History")?.ToString(),map.Get("Quote")?.ToString()));
Console.WriteLine("Sending item key" +item.Key.ToString());
key = item.Key;
}
HeroAdapter adapter = new PeaceHeroAdapter(Hero,this);
}