【发布时间】:2018-05-03 10:31:47
【问题描述】:
我有一个活动允许用户更改他的 UserPIN(Attendance_Records 表下的立即键),并且我已经读到除了删除和添加数据并再次更新之外,没有其他方法可以更新 Firebase 实时数据库.我的问题是我必须更新表中的键,但它有多个子键和大量数据。如何访问子密钥并存储它们?数据更新不会花很多时间吗?
假设我必须更新密钥:123452
出勤记录表
除了我在下面尝试过的以外,如果还有其他方法,我会全力以赴
编辑
我已经达到了可以使用以下方法从 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);
}
但是,添加到数据库的方式并没有按照应有的方式进行:
之前
之后
抱歉更新前的图片。更新后(123450 到 123459),第 3 个月和第 4 个月合并在一起,现在我没有 2 年(假设是 2018 年和 2019 年),否则我认为他们也会加入。我该如何纠正这个问题?
【问题讨论】:
标签: java android firebase firebase-realtime-database