Android 如何级联ValueEventListeners以访问firebase实时数据库中的两个不同节点
如何从android firebase实时数据库上的ValueEventListener()访问onDatachange,并在另一个ValueEventListener()中使用 在下面的代码中,您可以看到,第一个ValueEventListener()用于获取用户的UID,第二个ValueEventListener()将用于通过使用我们从第一个ValueEventListener()获取的UID访问用户详细信息节点中的特定值 但是在我得到UID之后,我无法访问userDetails节点,我得到了一个空指针异常Android 如何级联ValueEventListeners以访问firebase实时数据库中的两个不同节点,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,如何从android firebase实时数据库上的ValueEventListener()访问onDatachange,并在另一个ValueEventListener()中使用 在下面的代码中,您可以看到,第一个ValueEventListener()用于获取用户的UID,第二个ValueEventListener()将用于通过使用我们从第一个ValueEventListener()获取的UID访问用户详细信息节点中的特定值 但是在我得到UID之后,我无法访问userDetails节点,我得到
final String referralCodeTxt = ReferralCode.getText().toString().trim();
final DatabaseReference referralDB =FirebaseDatabase.getInstance().getReference();
referralDB.child("referralCodes").orderByValue().equalTo(referralCodeTxt).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
for (DataSnapshot snapshot: dataSnapshot.getChildren()) {
final String referrerUID = snapshot.getKey();
checkReferrer.setText(referrerUID);
referralDB.child("users").child(referrerUID).child("userDetails").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot ds) {
Users users = ds.getValue(Users.class);
String mPoints = users.getPoints().toString();
int refPoint = Integer.parseInt(mPoints) + 150;
referralDB.child("users").child(referrerUID).child("userDetails").child("points").setValue(refPoint);
Toast.makeText(SignUpActivity.this,"150 Points has been added to the Referrer", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}else{
}
在访问子级之前,请检查第二个dataSnapshot是否存在
values`databaseReference.child("referralCodes").orderByValue().equalTo(referralCodeTxt).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
final String referrerUID = snapshot.getKey();
checkReferrer.setText(referrerUID);
databaseReference.child("users").child(referrerUID).child("userDetails").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
Users user = dataSnapshot.getValue(Users.class);
Integer refPoints = user.getPoints();
Integer newPoints = refPoints + 150;
Toast.makeText(SignUpActivity.this, "Old Points: " + refPoints, Toast.LENGTH_SHORT).show();
Toast.makeText(SignUpActivity.this, "New Points: " + newPoints, Toast.LENGTH_SHORT).show();
databaseReference.child("users").child(referrerUID).child("userDetails").child("points").setValue(newPoints);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
} else {
Toast.makeText(SignUpActivity.this, "Error: Check referral code! ", Toast.LENGTH_SHORT).show();
return;
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});