2017-07-11 7 views
2

は、これは私のfirebaseデータベース構造子でが有効でないキャスト指定 - XamarinFirebase

Database Structure

で、値、名前、国、年齢やUidのがあります。 Uidが私の質問に焦点を当てています。

現在ログインしているユーザーに基づいてノードのチャット(チャット)を取得しようとしています。

私は基本的にここで比較をしようとしています、firebaseは私に子供を得るべきですUid = user.uid。すなわち、現在ログインしているユーザ。私はEquals()がトリックをすることができると思ったが、キャストでエラーが出る。

この行でエラーポイントvar items = snapshot.Children?.ToEnumerable<DataSnapshot>().Equals(user.uid).ToString;

public void OnDataChange(DataSnapshot snapshot) 
     { 
      var items = snapshot.Children?.ToEnumerable<DataSnapshot>().Equals(user.uid).ToString; 
      var key = snapshot.Key; 
      HashMap map; 
      foreach (DataSnapshot item in items) 
      { 

      } 

コンソール

 my snapshot test: DataSnapshot { key = Chat, value = {-KomfGbZxCGESgyo1PFT={Name=Testing , Ref=7YB3mxMRXxW4lzhbhxi1bx7K4Pf1, 

    }, -KomcJyR5dCxFucJSB0I={Name=Hi, Ref=K6TEpccn1TbB32T8ThFsYnIl6Wm2, }} } 

答えて

0

あなたはRef属性に基づいてユーザをフィルタリングする場合、私はあなたを示唆アイテムをフィルタリングするために、foreachループ内のif文を作る:

public void OnDataChange(DataSnapshot snapshot) 
    { 
     var items = snapshot.Children?.ToEnumerable<DataSnapshot>(); 
     HashMap map; 
     foreach (DataSnapshot item in items) 
     { 
      //filter the user first 
      map = (HashMap)item.Value; 
      string userId = map.Get("Ref")?.ToString(); 
      if (userId!=null&& userId == user.uid) 
      { 
       //do what you want to do here. 
      } 

     } 
+0

を取るにつれ、これは私の問題を解決していない、私はすでに、 'これを持っていますmChat = FirebaseDatabase.Instance.Reference.Child( "チャット"); mChat.AddValueEventListener(this); '私はすでにチャットをポイントしています。 –

+0

その後、 'Console.WriteLine(snapshot.ToString());'を使ってログを投稿してください。あなたがコード化したものはすべて推測できません。 –

+0

コンソールが更新されました。 –

0

あなたがToEnumerableを使用する場合、返されるオブジェクトの種類がDataSnapshotであり、それはuser.uidに比較することはできません。あなたはあなたが望むものをつかむためにlinqを使いたいかもしれません。 ?のようなもの:

するvar項目= snapshot.Children .ToEnumerable(X => x.uid == user.uid)

+0

私はまだオーバーロードメソッドToEnuerableを言っていないエラーが私のコードでは1 arguement –

関連する問題