Android 如果没有Firebase中的密钥,如何将新数据插入阵列
我有一个在本地创建并导入Firebase的现有阵列,我的阵列如下所示 这两个元素都是创建的对象,其中包含许多与约会相关的信息 现在,我尝试创建一个具有相同形式的新元素,例如: 二,-- |__以及我在应用程序中创建的对象 我只管理或消除了其余的元素(使用setValue(object)) 或者使用一个ID创建它,该ID在恢复数据时会导致应用程序中由于不相等对象的反序列化而崩溃 我要插入的约会对象是Android 如果没有Firebase中的密钥,如何将新数据插入阵列,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我有一个在本地创建并导入Firebase的现有阵列,我的阵列如下所示 这两个元素都是创建的对象,其中包含许多与约会相关的信息 现在,我尝试创建一个具有相同形式的新元素,例如: 二,-- |__以及我在应用程序中创建的对象 我只管理或消除了其余的元素(使用setValue(object)) 或者使用一个ID创建它,该ID在恢复数据时会导致应用程序中由于不相等对象的反序列化而崩溃 我要插入的约会对象是 public class Appointment implements Parcelable {
public class Appointment implements Parcelable {
private String fechacita;
private String horacita;
private Office oficina;
private String userID;
.....
}
该类是一个普通的可包裹类,可使用其生成器生成对象
请提供帮助…尝试此代码
mDatabaseRef.push().setValue(incidentReportUser)
这样写(push()
添加值而不是重写)
来自
更新1
如果您希望在键中使用序列,而不是一些随机值,请尝试以下操作:
使用获取列表中的最后一个键
Query dbQry = mDatabaseRef.orderByKey().limitToLast(1);
dbQry.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int key = Integer.parseInt(dataSnapshot.getKey());
//Increment the key and add the object here using the earlier method
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
}
到目前为止,我还没有对此进行检查,但您可能会有这样的想法我也尝试过,但此解决方案生成了一个我不想生成的密钥。可能不可能做到,但我不确定。我想做的是,与我发布的图像的形式相同,没有Firebase生成的键,并且在其他对象之后创建一个带有“键”2的对象。Altime数据库无法自动知道您创建的类似数组的结构中的下一个数字。您应该使用push()生成一个新键,并使用子属性来计算每个子项相对于彼此的顺序。请参见我的答案:
Query dbQry = mDatabaseRef.orderByKey().limitToLast(1);
dbQry.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int key = Integer.parseInt(dataSnapshot.getKey());
//Increment the key and add the object here using the earlier method
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
}