簡體   English   中英

Android:如何編寫Firebase實時數據庫查詢?

[英]Android : How to write Firebase realtime database query?

{
  "City" : {
    "New York" : {
      "City Name" : "New York",
      "Place to visit" : {
        "Times Square" : {
          "Address" : "Somewhere",
          "Name" : "Times Square"
        },
        "Central Park" : {
          "Address" : "On America",
          "Name" : "Central Park"
        }
      }
    },
    "Los Angeles" : {
      "City Name" : "Los Angeles",
      "Place to visit" : {
        "Hollywood" : {
          "Address" : "Up There",
          "Name" : "Hollywood"
        },
        "Beach" : {
          "Address" : "By the sea",
          "Name" : "Beach"
        }
      }
    }
  }
}

嗨,我是NoSQL數據庫的新手,尤其是Firebase。 如果我這樣構造數據,如何獲得“城市名”為“紐約”的“游覽地點”的名稱?

我希望結果(時代廣場和中央公園)顯示為ListView。 我該如何實現?

還是有什么更好的方法來重組我的數據,以便我可以更輕松地查詢所需的輸出?

首先,城市應該保存一個項目清單(在您的情況下,城市名稱為“ New York or Los Angeles”)。

這樣,您將更容易遍歷列表,並以最快,最有效的方式根據需要獲取所需的城市,這是因為您將獲得內置的遍歷方法。

我還對您的json響應進行了重組,以使其成為對象列表並刪除了冗余變量

以下是回應

{
"City": [{
            "New York": {
                "Place to visit": {
                    "Times Square": {
                        "Address": "Somewhere",
                        "Name": "Times Square"
                    },
                    "Central Park": {
                        "Address": "On America",
                        "Name": "Central Park"
                    }
                }
            }
        },
        {
            "Los Angeles": {
                "Place to visit": {
                    "Hollywood": {
                        "Address": "Up There",
                        "Name": "Hollywood"
                    },
                    "Beach": {
                        "Address": "By the sea",
                        "Name": "Beach"
                    }
                }
            }
        }
    ]
}

因為您要在查詢中使用的城市名稱已經是Firebase數據庫中的一個節點,所以要獲取這些名稱,請使用以下代碼:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference placeToVisitRef = rootRef.child("City").child("New York").child("Place to visit");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String placeToVisit = ds.getKey();
            Log.d("TAG", placeToVisit);
        }
    }

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

您的輸出將是:

Times Square
Central Park

試試這個

 DatabaseReference ref=   FirebaseDatabase.getInstance().getReference();
 DatabaseReference refPlace= rootRef.child("City").child("New York").child("Place to visit");
 refPlace.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                  Iterator<DataSnapshot> dataSnapshotsChat = dataSnapshot.child("articleTags").getChildren().iterator();

            while (dataSnapshotsChat.hasNext()) {
             DataSnapshot dataSnapshotChild = dataSnapshotsChat.next();
           // check dataSnapshotChild, here you will get the details under Place to visit
      Object name = ds.child("Times Square").getValue(Object.class);
             }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM