Android 如果没有Firebase中的密钥,如何将新数据插入阵列

Android 如果没有Firebase中的密钥,如何将新数据插入阵列,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我有一个在本地创建并导入Firebase的现有阵列,我的阵列如下所示 这两个元素都是创建的对象,其中包含许多与约会相关的信息 现在,我尝试创建一个具有相同形式的新元素,例如: 二,-- |__以及我在应用程序中创建的对象 我只管理或消除了其余的元素(使用setValue(object)) 或者使用一个ID创建它,该ID在恢复数据时会导致应用程序中由于不相等对象的反序列化而崩溃 我要插入的约会对象是 public class Appointment implements Parcelable {

我有一个在本地创建并导入Firebase的现有阵列,我的阵列如下所示

这两个元素都是创建的对象,其中包含许多与约会相关的信息

现在,我尝试创建一个具有相同形式的新元素,例如:

二,-- |__以及我在应用程序中创建的对象

我只管理或消除了其余的元素(使用setValue(object))

或者使用一个ID创建它,该ID在恢复数据时会导致应用程序中由于不相等对象的反序列化而崩溃

我要插入的约会对象是

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) {

    }
}