2017-11-03 9 views
-1

私はAndroidアプリケーションを使用しています。子鍵をお持ちの場合、ルートから直接子ノードの値を取得する方法

登録ユーザーの情報を保持するFireBaseデータベースを作成しました。

私は、認証セクションのユーザーUser UIDである私のデータベース内のユーザーのためのコスチュームキーを作成しました。ユーザーがログインすると、私はUser UIDを得て、自分のFireBaseデータベース内の情報をルートノードからその特定のノードに直接検索して、常にnull値を与えます。

親切にお手伝いします。

コードスニペットをアップロードできる場合は、高く評価されます。

Database sample and location of problem。あなたが得たユーザIDに等しい状態を持ちながら

+0

UIDをお持ちの場合は、情報を入手しやすくなります。あなたの問題は、間違ったレベルの情報にアクセスしようとしていることです。情報にアクセスするあなたの論理を共有してください。これを試してください: - DatabaseReference ref = FirebaseDatabase.getInstance()。getReference();文字列uri = ref.child( "YOUR_UUID")。子( "imageUri")。 –

+0

私はあなたの応答をありがとう。私は自分のコードを削除し、あなたの提案された解決策を実行しますが、.value()メソッドはありません。さらにこの時点では、getValueメソッドが表示されていません。 –

+0

ここにコードはあります:auth = FirebaseAuth.getInstance(); 文字列userID = auth.getCurrentUser()。getUid(); databaseReference = FirebaseDatabase.getInstance()。getReference(userID); databaseReference.addValueEventListener(新しいValueEventListener(){ 公共ボイドOnDataChangeの(DataSnapshotのDS用(DataSnapshot dataSnapshot){ :dataSnapshot.getChildren()){ 文字列の子= ds.getValue()のtoString(); のSystem.out。 .println(「子供がいる:」+子); } –

答えて

0
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("teacher"); 

ref.orderByKey().equalto(currentuser.getUid()).addChildEventListener(new ChildEventListener() { 
public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      String value=dataSnapshot.child("teacherName").getValue().toString(); 

     } 
public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
} 
public void onChildRemoved(DataSnapshot dataSnapshot) { 
} 
public void onChildMoved(DataSnapshot dataSnapshot, String s) { 
} 
public void onCancelled(FirebaseError firebaseError) { } 
}); 

リファレンスあなたが照会する場所はaddChildEventListenerとクエリを実行します。

FirebaseUser currentuser = FirebaseAuth.getInstance().getCurrentUser(); 
+0

私は本当にあなたの応答府に感謝t私はハードコアのトップに教師を望んでいません。ログインした時点で、ログインしたユーザーが教師や学生であることを知りません。データベースにキーとして使用していたユーザーのUIDを知っていますこれはキーの値を直接取得する方法ですか? –

+0

ああ、あなたはすべてのusersID上だけループだけ? ' –

0

データを取得するには、次のコードを使用してください:uidはあなたが既に持っていると言うユーザーのIDです

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference uidRef = rootRef.child("teacher").child(uid); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     String ImageUri = dataSnapshot.child("ImageUri").getValue(String.class); 
     String teacherName = dataSnapshot.child("teacherName").getValue(String.class); 
     String teacher_key = dataSnapshot.child("teacher_key").getValue(String.class); 
     Log.d("TAG", ImageUri + "/" + teacherName + "/" + teacher_key); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
uidRef.addListenerForSingleValueEvent(eventListener); 

します。

+0

私は教師のノードを無視することによってそれを行うことができます'子(「教師」)を参照しないことができ、私はどちらか知らないので、それだけで教師やstudent.IですそのUID.Iは、私はいくつかの特定の子ノードのアドレスを持っている場合は滞在する意味を知っていた、それはその親を無視することによって、そのノードの値を超過することは可能ですか? –

+0

ノードを無視することはできません。すべてのノードは、Firebaseデータベース内の場所です。 –

+0

あなたは何をすることができますか、ログインするとき、ユーザーの種類、教師または学生を決定させることです。 –

関連する問題