![](/img/trans.png)
[英]How to cancel Firebase Realtime Database ongoing write or delete operation in Android
[英]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.