【问题标题】:How could I insert new data to array without key in Firebase如何在 Firebase 中没有键的情况下将新数据插入数组
【发布时间】:2018-06-11 15:08:35
【问题描述】:

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

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

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

2-- |__ 以及我在应用中创建的对象

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

        Appointment newAppointment = new Appointment.Builder()
            .fechacita(dateSelected)
            .horacita(hourSelected)
            .usertoken(mAuthManager.getCurrentUserId())
            .oficina(centerSelected)
            .build();

    mDatabaseRef.child("LISTACITAS").setValue(newAppointment);

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

我要插入的约会对象是

public class Appointment implements Parcelable {

private String fechacita;
private String horacita;
private Office oficina;
private String userID;
.....
}

该类是一个普通的 Parcelable 类,它使用她的构建器生成一个对象。

请帮忙...

【问题讨论】:

  • 实时数据库无法自动知道您创建的类似数组的结构中的下一个数字。您应该使用 push() 来生成一个新密钥,并使用子属性来确定每个子项之间的相对顺序。
  • 在这里查看我的答案:stackoverflow.com/questions/50787817/…

标签: android firebase firebase-realtime-database


【解决方案1】:

试试这个代码

mDatabaseRef.push().setValue(incidentReportUser)

这样写(push() 添加值而不是覆盖)。

来自here的回答

更新 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创建一个对象,跟随其他对象
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 2022-07-21
  • 2021-12-24
  • 2023-03-20
  • 1970-01-01
  • 2022-07-02
  • 1970-01-01
相关资源
最近更新 更多