2017-03-17 45 views
1

是否有任何可能的方式來產生從兒童 的孩子的結果就像我在單個問題上尋找多個答案。如何訪問隨機子女Firebase DataBase ..?

"questions" : { 
    "Q1(Random ID)" : { 
     "description" : "Deail of Question", 
     "idQuestion" : "Q1", 
     "time" : "17 Mar 2017 16:18:12", 
     "title" : "Title Of Question", 
     "user_id" : "bXCeW6jfidbHuMCCCMkDGWcGZRS2" 
    }, 
{ 
    "Answer" : { 
    "81d19e85-8c6c-4824-9fb1-61a7cd316e32" : { 
     "dateTime" : "17 Mar 2017 16:22:17", 
     "Answer" : "Answer", 
     "ProfessorId" : "da587c89-f001-43f2-984d-e6dbac491acc", 
     "questionId" : "Q1" 
    }, 
    "e2ec0556-4420-4d2f-b346-0b5cebeb1ebe" : { 
     "dateTime" : "17 Mar 2017 16:55:27", 
     "Answer" : "Answer 2 on Question 1", 
     "answerId" : "0d20d6df-907d-4133-be53-ca6acf6c2ad1", 
     "questionId" : "Q1" 
    } 
    }, 

隨機生成的節點。 ! 想要做這樣的事情!

mdatabaseReference.child("Answer").child(* Here Im Using "*" Like we used to do in SQl to get all data I knw its not a SQL but its just for conecpt).equalTo(QID).addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       if (Answer_List.size() > 0) 
        Answer_List.clear(); 


       for (DataSnapshot postsnapshot : dataSnapshot.getChildren()) { 

而不是使用postSnapshot.getKey().equals("QID")

if(postSnapshot.getKey().equals("QID")) 
Answertext = postSnapshot.getValue().toString(); 

它會使性能較慢我在尋找一些東西更快的使用!

尋找這樣的事情

mdatabaseReference.child("Answer").child("*").getKey().equals(QID).addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

回答

1

您正在尋找Firebase Database queries

mdatabaseReference 
    .child("Answer") 
    .orderByChild("questionId") 
    .equalTo("Q1") 
    .addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot answerSnapshot: dataSnapshot.getChildren()) { 
     System.out.println(answerSnapshot.child("Answer").getValue()); 
     } 
    } 
    ... 

但是,雖然這將起作用,但我強烈建議您更改數據模型以使此類查詢更具可伸縮性。由於答案屬於問題,您應該對該層次結構進行建模。雖然你不應該搭配的問題和答案,你應該考慮下這個問題ID造型答案:

"questions" : { 
    "Q1(Random ID)" : { 
     "description" : "Deail of Question", 
     "idQuestion" : "Q1", 
     "time" : "17 Mar 2017 16:18:12", 
     "title" : "Title Of Question", 
     "user_id" : "bXCeW6jfidbHuMCCCMkDGWcGZRS2" 
    }, 
} 
"Answer" : { 
    "Q1": { 
    "81d19e85-8c6c-4824-9fb1-61a7cd316e32" : { 
     "dateTime" : "17 Mar 2017 16:22:17", 
     "Answer" : "Answer", 
     "ProfessorId" : "da587c89-f001-43f2-984d-e6dbac491acc", 
    }, 
    "e2ec0556-4420-4d2f-b346-0b5cebeb1ebe" : { 
     "dateTime" : "17 Mar 2017 16:55:27", 
     "Answer" : "Answer 2 on Question 1", 
     "answerId" : "0d20d6df-907d-4133-be53-ca6acf6c2ad1", 
    } 
    } 
} 

通過這樣的結構,你可以得到Q1的答案有直接查找,而不是一個查詢(在每個增長列表中):

mdatabaseReference 
    .child("Answer") 
    .child("Q1") 
    .addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot answerSnapshot: dataSnapshot.getChildren()) { 
     System.out.println(answerSnapshot.child("Answer").getValue()); 
     } 
    } 
    ...