如何从Firebase获取Item Key

时间:2017-07-02 06:45:44

标签: c# android firebase firebase-realtime-database xamarin.android

我想在我的数据库中获取数据的项密钥,但正如您在DataSnapshot函数中看到的那样,我调用try来获取项密钥但它返回空。我正在尝试将所有项密钥绑定到我的数据提取。因此,每个获取的项目都应该包含其中的密钥,以便我可以使用密钥。但是,除了项密钥之外,所有其他元素都被取出。为什么项目键没有显示?谢谢你的帮助

结构

enter image description here

模型

 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);

        }

3 个答案:

答案 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);


        }