Firebase查询数据
{
"random_key 1" : {
"id": 0,
"text": "This is text"
},
"random_key 2" : {
"id": 1,
"text": "This is text"
}
}
如果我以这种方式存储我的数据,并且我想获取id
等于0
的节点。我怎样才能做到这一点?Firebase查询数据
以上是issue
的小孩,它是root
的小孩。
你的情况,你就必须建立一个这样的查询:
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) {
}
});
可以请你帮我解决这个问题中的相同类型的问题: - http://stackoverflow.com/q/42502024/3946958 ...你可以告诉我你的答案是什么“问题”? ??? –
它适用于我,,但你能告诉我们如何过滤数据与多个选项..喜欢用户从国家,州,市 –
但是,如果我不想orderByChild命令?我只是想通过id匹配...对我来说,命令结果是额外的计算。 – dsharew
@ 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) {
}
});
此代码对我的作品
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) {
}
});
对于火力地堡的一个易于使用的跨平台整合,你也可以看看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
})
}
}
我的措辞我的问题有点不同,但我的帖子中的答案应该可以帮助你。 http://stackoverflow.com/questions/39023945/how-to-get-data-from-real-time-database-in-firebase/39024068#39024068 –
如果你已经有一个现有的ID,为什么你不存储该ID下的数据?它将使查找更容易。 –
@FrankvanPuffelen我已经存储在ID下的所有数据;我需要传递哪个值以通过该ID查询orderChild? – Shruti