【问题标题】:How to retrieve specific list of data from firebase?如何从firebase中检索特定的数据列表?
【发布时间】:2017-03-17 12:01:43
【问题描述】:

有没有办法从孩子的孩子那里得到结果。 我正在寻找一个问题的多个答案。!

"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) {

【问题讨论】:

    标签: java android database firebase firebase-realtime-database


    【解决方案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());
          }
        }
        ...
    

    【讨论】:

      猜你喜欢
      • 2016-12-03
      • 2023-04-05
      • 1970-01-01
      • 2018-12-09
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      • 2018-02-25
      相关资源
      最近更新 更多