Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更新Firebase实时数据库中的密钥并访问子密钥_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 更新Firebase实时数据库中的密钥并访问子密钥

Java 更新Firebase实时数据库中的密钥并访问子密钥,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我有一个活动,允许用户更改其UserPIN(考勤记录表下的即时键),我了解到,除了再次删除和添加更新数据外,没有其他方法更新Firebase实时数据库。我的问题是我必须更新一个表,该表的键我想更新,但它有多个子键和大量数据。如何访问子密钥并存储它们?数据更新不会花费很多时间吗?还有什么我错过的方法吗 编辑 我已达到通过以下方式从考勤记录表中检索数据的水平: rootRefAttTable = FirebaseDatabase.getInstance().getReference("Attend

我有一个活动,允许用户更改其UserPIN(考勤记录表下的即时键),我了解到,除了再次删除和添加更新数据外,没有其他方法更新Firebase实时数据库。我的问题是我必须更新一个表,该表的键我想更新,但它有多个子键和大量数据。如何访问子密钥并存储它们?数据更新不会花费很多时间吗?还有什么我错过的方法吗

编辑

我已达到通过以下方式从考勤记录表中检索数据的水平:

rootRefAttTable = FirebaseDatabase.getInstance().getReference("Attendance_Records").child(carriedmPIN);

    newRefAttTable = FirebaseDatabase.getInstance().getReference("Attendance_Records");

    attRec = new Attendance_Records();
然后

但是,添加到数据库的方式与以前不同:

很抱歉更新前的图像。
更新后(123450到123459),第3个月和第4个月合并在一起,目前我没有2年的时间(假设是2018年和2019年),否则我认为他们也会加入。我怎样才能纠正这个问题

我想我明白你想做什么了。Firebase没有通过更新“重命名”部分路径的概念。相反,您必须完全删除现有节点并重新创建它。这将在非常短的时间内完成,因此不会通知您已删除并添加了一个全新的节点

步骤1:通过将现有对象作为模型检索来复制该对象

第2步:使用您想要的更新名称创建一个新的子项

步骤3:使用
ref.setValue(model)为新创建的子级赋值


步骤4:使用
ref.removeValue()删除旧的子对象或<代码>参考设置值(空)

您想重命名哪个特定的密钥?@AlexMamo 123452是我想要的密钥rename@AlexMamo我尝试了一些代码并编辑了我的问题,请检查that@AlexMamo你能快点告诉我吗。。。我是在最后期限上的:/是的,我知道这一点,因此朝着同一个方向走,但我在这方面有困难,请参考我所做的编辑
private void changeAttTable(){
    Log.d("abcd","changeAttTable() reached");

    rootRefAttTable.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
                if(dataSnapshot.exists()){

                for(DataSnapshot yearsnap:dataSnapshot.getChildren()){
                    yearKey = yearsnap.getKey();
                    Log.d("abcd","yearKey is: "+yearKey);

                    monthkeyRef = rootRefAttTable.child(yearKey);
                    monthkeyRef.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            if(dataSnapshot.exists()){
                                for(DataSnapshot monthsnap:dataSnapshot.getChildren()){
                                    monthKey = monthsnap.getKey();

                                    datekeyRef = monthkeyRef.child(monthKey);
                                    datekeyRef.addListenerForSingleValueEvent(new ValueEventListener() {
                                        @Override
                                        public void onDataChange(DataSnapshot dataSnapshot) {
                                            if(dataSnapshot.exists()){

                                                for(DataSnapshot datesnap:dataSnapshot.getChildren()){
                                                    dateKey = datesnap.getKey();


                                                    date = datesnap.child("date").getValue(String.class);
                                                    enteryDate = datesnap.child("entryDate").getValue(String.class);
                                                    inTime = datesnap.child("inTime").getValue(String.class);
                                                    month = datesnap.child("month").getValue(String.class);
                                                    myID = datesnap.child("myID").getValue(String.class);
                                                    outTime = datesnap.child("outTime").getValue(String.class);
                                                    status = datesnap.child("status").getValue(String.class);
                                                    year = datesnap.child("year").getValue(String.class);

                                                    addDataAttTable();
                                                }
                                            }
                                        }

                                        @Override
                                        public void onCancelled(DatabaseError databaseError) {

                                        }
                                    });
                                }
                            }
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });

                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

private void getValuesAtt(){
    Log.d("abcd","getValuesAtt() reached");

    attRec.setYear(year);
    attRec.setMonth(month);
    attRec.setMyID(myID);
    attRec.setEntryDate(enteryDate);
    attRec.setStatus(status);
    attRec.setOutTime(outTime);
    attRec.setInTime(inTime);
    attRec.setDate(date);
}

private void addDataAttTable(){
    Log.d("abcd","addDataAttTable() reached");

    getValuesAtt();
    newRefAttTable.child(carriedmPIN).removeValue();
    newRefAttTable.child(enterednewmpin).child(yearKey).child(monthKey).child(dateKey).setValue(attRec);
}