参考文献是:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("users");
DatabaseReference TUidRef = usersRef.child(td);
td
的值是从以前的活动中得出的:
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final String dataName = parent.getItemAtPosition(position).toString();
usersdRef.orderByChild("username").equalTo(dataName).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot data: dataSnapshot.getChildren()){
String dataUID = data.child("uid").getValue(String.class);
Log.i("uid",dataUID);
startActivity(new Intent(Main2Activity.this, Main5Activity.class).putExtra("valueName", dataName).putExtra("valueUID",dataUID));
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
});
Bundle bundle = getIntent().getExtras();
td = bundle.getString("valueUID");
childEventListener
可与usersRef
一起使用,但不能与TUidRef
一起使用,并且不会崩溃或发生任何事情,它什么也没做。
答案 0 :(得分:1)
有三种情况:
在向/users
加载ValueEventListener
时,您在DataSnapshot
中获得的onDataChange
包含一个用户列表。因此,您需要遍历dataSnapshot.getChildren()
才能获得每个用户。
当您查询 /users
时,可能有多个符合查询条件的子节点。因此,您在DataSnapshot
中获得的onDataChange
包含一个用户列表,您需要遍历它们。
将ValueEventListener
附加到/users/$uid
时,您在DataSnapshot
中获得的onDataChange
包含单个用户的属性。因此,您不再需要遍历DataSnapshot.getChildren()
:
最后一种情况的代码:
TUidRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String dataUID = data.child("uid").getValue(String.class);
Log.i("uid",dataUID);
startActivity(new Intent(Main2Activity.this, Main5Activity.class).putExtra("valueName", dataName).putExtra("valueUID",dataUID));
}
...
答案 1 :(得分:0)
我认为您没有正确通过捆绑软件尝试更改
td = bundle.getString("valueUID");
到
td = getIntent().getString("valueUID");