从Firebase检索数据以创建要在数据库中编辑的地址

时间:2018-01-02 20:56:12

标签: android firebase firebase-realtime-database

因此,这就是我的Firebase数据库的样子:

enter image description here

我目前正在尝试读取 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);
    }

感谢您的帮助!

1 个答案:

答案 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()方法。