2017-07-02 7 views
2

私のデータベースのアイテムキーを取得したいのですが、DataSnapshot関数で見られるようにアイテムキーを取得しようとしましたが空に戻ります。すべてのアイテムキーをデータフェッチにバインドしようとしています。だから私はキーを使用することができますので、フェッチされたすべての項目は、そのキーを持っている必要があります。しかし、アイテムキーを除いて他のすべての要素がフェッチされます。アイテムキーが表示されないのはなぜですか?あなたの助けFirebugからアイテムキーを取得する方法

構造

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

     } 

答えて

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


     } 
+0

何が問題でしたか? 'Key.ToString()'を呼び出す必要があるのはなぜでしょうか? 'Console.WriteLine("アイテムキー "+ item.Key.ToString());" –

+0

アイテムをバインドしようとしましたが、 foreachループ内のすべてのデータ呼び出しのキー – Switz

1

私はitem.Keyをすることになっているかわからないのですが、あなたのヒーローのコンストラクタは次のようになります。

Hero.Add(new Hero(map.Get(""Uid"")?.ToString(),map.Get("Name")?.ToString(), map.Get("Achievement")?.ToString(),map.Get("History")?.ToString(),map.Get("Quote")?.ToString())); 
+0

私のデータベースの構造を見てください。私はアイテムのキーを取得しようとしていますknz ..........ユーザーのuidではありません – Switz

+0

あなたはどのバージョンを使用していますか? 'getKey()'や 'Key()'を試してみましたか?異なるバージョンのdocsには異なるメソッドがあります。あなたのコンソール出力は何ですか? –

+0

私はVs、Xamarinを使用していますので、Keyを使用します。コンソールで、私はすべてのキーを取得します。意味は、私は主人公のuidを要求するとき、それは主人公のキーではなく、ユーザーのidを返すはずですが、空に戻ります。 – Switz

1

あなたがキーを取得していない理由があるためでありますあなたは間違ったデータスナップショットでそれを探しています。

の代わりに、以下: - この

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)メソッドで取得したdatasnapshotのキーが必要です。これはsnapshotです。したがって、snapshot.Keyと電話する必要があります。

+0

私が 'var key = snapshot.Key'を呼び出すと、キーではなく構造の名前である' Hero'が得られます – Switz

関連する問題