2017-06-06 13 views
0

過去5日間、Firebaseデータベースからデータフィールドを取得しようとしましたが、成功しませんでした。データをフェッチするFirebaseデータベースからデータフィールドを取得できません

enter image description here

コード::これは私のデータベースは次のようになります

private void alterTextView(final String id) { 
     if(id!=null) { 
     mDatabase.child("Users").child(id).addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       UserInformation userInformation = dataSnapshot.getValue(UserInformation.class); 
       String name = (String) userInformation.getName(); 


       Log.d("Main Activity",name); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 
     mWelcomeUserMessage.setText("Welcome, "+name); 

    } 
}` 

私は名前が「NULL」(ログを参照)である理由はわかりません。 誰かが私が間違っていることを教えてもらえますか?

PS:私のUserInformation.javaクラスに空のデフォルトのコンストラクタ、getters、およびsetterを定義しました。次のように

また、mDatabaseが初期化されます。 mDatabase = FirebaseDatabase.getInstance().getReference();

+0

ここであなたのdataSnapshotの.toString()を過去にすることができますか? –

+0

私は理解していません..私はdataSnapshotの.toString()を持っていません。 私はgetValue()で十分だろうと思った? –

+0

これは、キーと値を使ってjsonを印刷します。 Log.d(TAG、 "受信データ:" + dataSnapshot.toString()); –

答えて

1

dataSnapshot.getValue(Class)公共分野へのだろう唯一の負荷と設定値。私はあなたが既にデフォルトコンストラクタを持っているのを見ます。

UserInformationクラスのnameフィールドをpublicにします。また、getValueを呼び出すスナップショットがUserInformationクラスの有効なJSON表現で、まったく同じ "name"フィールド(クラスのnameフィールドと完全に一致している必要があります)を持っていることを確認してください。

注意: addValueEventListenerは、データが利用可能なときに呼び出されるリスナーを追加します。

データはonDataChangeが呼び出された後に利用可能ですのでご注意ください。そのため、必要なデータを入手した直後に、DataSnapshotからテキストを設定する必要があります。そのように:

+0

私はこれを行いました。今私は、dataSnapshot.toString()メソッドを使用してクラスを表示しようとすると、問題はありません。しかし、私は私のテキストビューのテキストを設定しようとすると、それはまだ空白です。私は通常のゲッターメソッドを使用して名前を取得します。 –

+0

@Yashコードを入力してください。 onDataChangeメソッドでTextViewのテキストを設定している可能性があります。非同期に呼び出されるため、これを行うことはできません。 –

+0

最近の質問の更新でコードを提供しました。それでもnullが表示されます –

関連する問題