如何通过firebase实时数据库中的push()方法获取指定数据子项?
我使用child.push()
方法保存数据,以便每当注册Posts子项时它都会生成一个随机密钥。每个帖子还有一个发布它的用户的用户ID,这也是一种主键。
以下是我写新帖子的代码: -
private void writeNewPost(String userId, String tittle, String address, String locationLat, String locationLong, String date, String extrass, String postId) {
Alerts alerts = new Alerts(userId, tittle, address, date, locationLat, locationLong, extrass, postId);
String key = mDatabaseUsers.push().getKey();
// String key = mDatabase.child("posts").push().getKey();
mDatabaseUsers.child("Posts").child(key).setValue(alerts, new DatabaseReference.CompletionListener() {
public void onComplete(DatabaseError error, DatabaseReference ref) {
Log.d("ssd", "onComplete: " + error);
}
});
}
现在我想要检索一个特定的帖子,但我无法理解,例如我有RecyclerView
我在哪里显示所有帖子。当用户点击特定帖子时应该检索帖子以及来自firebase的数据,但我无法理解。我使用过这样的addValueEventListener
: -
mDatabase.child("Posts").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final String key = mDatabase.push().getKey();
// String name = (String)
dataSnapshot.child("name").getValue();
// String mobile = (String) dataSnapshot.child("phoneNumber").getValue();
// String additionalIn = (String) dataSnapshot.child("extras").getValue();
// String address = (String) dataSnapshot.child("address").getValue();
// String profile_pic = (String) dataSnapshot.child("address").getValue();
String post_uid = (String) dataSnapshot.child("userid").getValue();
String post_tittle = (String) dataSnapshot.child("tittle").getValue();
// if (mAuth.getCurrentUser().getUid().equals(post_uid)){
//
// deleteBtn.setVisibility(View.VISIBLE);
// }
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d("OMG", "onCancelled: " + databaseError);
}
});
}
}
但我无法理解如何在onClick()
或任何其他类似的回调方法中检索特定的孩子。
答案 0 :(得分:1)
根据他的ID检索用户信息:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference();
postRef= FirebaseDatabase.getInstance().getReference().child("Posts").child("Posts");
postRef.orderByChild("tittle").equalTo(post_here).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds: dataSnapshot.getChildren()){
String userid=ds.child("userid").getValue().toString();
ref.child("Users").child("Users").orderByKey().equalTo(userid).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
String fullname=dataSnapshot.child("address").getValue().toString();
//other data
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
用户点击帖子后,您可以使用用户的ID检索该帖子的数据,然后您可以通过orderByKey().equalTo(userid)