因此,这就是我的Firebase数据库的样子:
我目前正在尝试读取 UserInformation / Shift / zTZ0U1K8aGb6bP94YTUA50ZwIlx2 / Shift 的值,以便将 ShiftInformation / 1514855312873 / Team / zTZ0U1K8aGb6bP94YTUA50ZwIlx2 的值设置为null。
当我按下按钮" buttonMyShift"时,我需要读取值" 1514855312873"因为它是从System.getCurrentTimeMillis()生成的。 我一直试图通过改变" onDataChange"中的值来实现这一点。方法,该应用程序要么崩溃,要么只删除UserInformation / Shift。
这是我的活动代码:
if (view == buttonMyShift){
final FirebaseUser user = mAuth.getCurrentUser();
final FirebaseDatabase database = FirebaseDatabase.getInstance();
databaseReference = database.getReference("UserInformation/Shift/").child(user.getUid()).child("Shift");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
//Read the value of UserInformation/Shift/user.getUid()/Shift
SHIFT uShift = dataSnapshot.getValue(SHIFT.class);
//Setting the value of userShift to UserInformation/Shift/user.getUid()/Shift
String userShift = uShift.toString().trim();
//Setting the value of ShiftInformation/userShift/Team/user.getUid() to null
mReference = database.getReference("ShiftInformation").child(userShift).child("Team").child(user.getUid());
mReference.setValue(null);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("The read failed: " + databaseError.getCode());
}
});
//set UserInformation/Shift/user.getUid to null
SHIFT nshift = new SHIFT(null);
databaseReference.setValue(nshift);
Toast.makeText(MainMenuActivity.this,"Adeus!",Toast.LENGTH_SHORT).show();
//leave the activity
Intent intent = new Intent(MainMenuActivity.this,BadgeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
startActivity(intent);
}
感谢您的帮助!
答案 0 :(得分:1)
要获取Shift
字段1514855312873
的值,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference shiftRef = rootRef.child("UserInformation").child("Shift").child(user.getUid()).child("Shift");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String shift = dataSnapshot.getValue(String.class);
Log.d("TAG", shift);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
shiftRef.addListenerForSingleValueEvent(eventListener);
输出将是:
1514855312873
您的DatabaseReference
是正确的,但代码中的问题是您在不需要时使用getChildren()
方法。