У меня есть действие, в котором я разрешаю пользователю изменять свой UserPIN (непосредственный ключ в таблице Attendance_Records), и я прочитал, что нет никакого способа обновить базу данных Firebase Realtime, кроме удаления и добавления данных с обновлением снова , Моя проблема в том, что мне нужно обновить ключ в таблице, но в ней есть несколько подразделов и много данных. Как я могу получить доступ к подразделам и сохранить их? Не займет ли обновление данных много времени?
Предположим, мне нужно обновить ключ: 123452
Таблица посещений_Records
Я весь слух, если есть какой-либо другой способ сделать это, кроме того, что я попробовал ниже
EDIT
Я достиг уровня, на котором я могу получить данные из таблицы Attendance_Records, используя:
rootRefAttTable = FirebaseDatabase.getInstance()
.getReference("Attendance_Records")
.child(carriedmPIN);
newRefAttTable = FirebaseDatabase.getInstance()
.getReference("Attendance_Records");
attRec = new Attendance_Records();
тогда
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);
}
Но, добавление в базу данных не так, как должно было быть:
До
* После 1040 *
Извините за изображение перед обновлением. После обновления (с 123450 по 123459) месяцы 3 и 4 объединяются, и на данный момент у меня нет 2 лет (предположим, 2018 и 2019), иначе я думаю, что они также присоединились бы. Как я могу это исправить?