2016-08-18 113 views
7
{ 
    "random_key 1" : { 
    "id": 0, 
    "text": "This is text" 
    }, 
    "random_key 2" : { 
    "id": 1, 
    "text": "This is text" 
    } 
} 

如果我以這種方式存儲我的數據,並且我想獲取id等於0的節點。我怎樣才能做到這一點?Firebase查詢數據

以上是issue的小孩,它是root的小孩。

+0

我的措辭我的問題有點不同,但我的帖子中的答案應該可以幫助你。 http://stackoverflow.com/questions/39023945/how-to-get-data-from-real-time-database-in-firebase/39024068#39024068 –

+0

如果你已經有一個現有的ID,爲什麼你不存儲該ID下的數據?它將使查找更容易。 –

+0

@FrankvanPuffelen我已經存儲在ID下的所有數據;我需要傳遞哪個值以通過該ID查詢orderChild? – Shruti

回答

22

你的情況,你就必須建立一個這樣的查詢:

DatabaseReference reference = FirebaseDatabase.getInstance().getReference(); 

    Query query = reference.child("issue").orderByChild("id").equalTo(0); 
    query.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if (dataSnapshot.exists()) { 
       // dataSnapshot is the "issue" node with all children with id 0 
       for (DataSnapshot issue : dataSnapshot.getChildren()) { 
        // do something with the individual "issues" 
       } 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
+0

可以請你幫我解決這個問題中的相同類型的問題: - http://stackoverflow.com/q/42502024/3946958 ...你可以告訴我你的答案是什麼「問題」? ??? –

+0

它適用於我,,但你能告訴我們如何過濾數據與多個選項..喜歡用戶從國家,州,市 –

+0

但是,如果我不想orderByChild命令?我只是想通過id匹配...對我來說,命令結果是額外的計算。 – dsharew

1

@ Linxy的答案是正確的,但既然你是從數據庫中讀取項目的列表,最好使用兒童事件偵聽器而不是值事件偵聽器。

DatabaseReference reference = FirebaseDatabase.getInstance().getReference(); 

Query query = reference.child("issue").orderByChild("id").equalTo(0); 
query.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
     //Do something with the individual node here`enter code here` 
    } 

    @Override 
    public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

    } 

    @Override 
    public void onChildRemoved(DataSnapshot dataSnapshot) { 

    } 

    @Override 
    public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 

    } 


}); 
0

此代碼對我的作品

mFirebaseDatabase.addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(final DataSnapshot dataSnapshot) { 
       for (DataSnapshot data : dataSnapshot.getChildren()) { 
       //If email exists then toast shows else store the data on new key 
        if (!data.getValue(User.class).getEmail().equals(email)) { 
         mFirebaseDatabase.child(mFirebaseDatabase.push().getKey()).setValue(new User(name, email)); 
        } else { 
         Toast.makeText(ChatListActivity.this, "E-mail already exists.", Toast.LENGTH_SHORT).show(); 
        } 
       } 
      } 

      @Override 
      public void onCancelled(final DatabaseError databaseError) { 
      } 
     }); 
0

對於火力地堡的一個易於使用的跨平臺整合,你也可以看看V-Play Engine for mobile apps

FirebaseDatabase { 
    id: firebaseDb 

    Component.onCompleted: { 
    //use query parameter: 
    firebaseDb.getValue("public/bigqueryobject", { 
        orderByKey: true, //order by key before limiting 
        startAt: "c",  //return only keys alphabetically after "c" 
        endAt: "m",  //return only keys alphabetically before "m" 
        limitToFirst: 5, //return only first 5 sub-keys 
    }) 
    } 
}