【发布时间】:2017-02-10 10:11:45
【问题描述】:
我有以下 Firebase 数据库结构。 uIds 是 List<String> 的一种。我正在尝试在uIds 下添加另一个带有递增索引的uId。 setValue() 和 updateChildren() 将要求我检索现有数据,push() 将添加一个随机生成的字符串作为键而不是递增索引的项目。有没有更简单的方法不需要检索现有数据?谢谢!
"requests" : {
"request001" : {
"interests" : [ "x" ],
"live" : true,
"uIds" : [ "user1" ] // <---- from this
},
"request002" : {
"interests" : [ "y" ],
"live" : true,
"uIds" : [ "user2" ]
}
}
--------------------------------
编辑:
抱歉,不清楚。让我详细说明一下。 假设我有上述数据库并想将其更新为以下内容。
"requests" : {
"-KSVYZwUQPfyosiyRVdr" : {
"interests" : [ "x" ],
"live" : true,
"uIds" : [ "user1", "user2" ] // <--- to this
},
"-KSl1L60g0tW5voyv0VU" : {
"interests" : [ "y" ],
"live" : true,
"uIds" : [ "user2" ]
}
}
ishmaelMakitla 的建议mDatabase.child("requests").child("request001").setValue(newRequest) 将用“newRequest”覆盖“request001”。所以我应该检索“request001”的现有数据并将“user2”添加到列表uIds。它会是这样的:
mDatabase.child("requests").child("request001").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Request newRequest = dataSnapshot.getValue(Request.class);
newRequest.uIds.add("user2");
mDatabase.child("requests").child("request001").setValue(newRequest);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
但我想知道这个过程是否有必要,因为我要做的只是将一项添加到列表uIds。
【问题讨论】:
-
我的检索数据是什么意思?一切都是为了更新。请尝试再清楚一点,以便更容易为您提供帮助。
-
通过检索数据,我的意思是运行一个 ValueEventListener 来读取现有的 uId 列表
-
但您不必附加侦听器来更新子级。你只需要一个参考。只有当您特别想读取数据时,您才会使用侦听器。
标签: android firebase firebase-realtime-database