更新 Firebase 中键的值
Posted
技术标签:
【中文标题】更新 Firebase 中键的值【英文标题】:Update value of key in Firebase 【发布时间】:2016-12-02 17:36:44 【问题描述】:在以 web 和 android 作为客户端的 Firebase 应用程序中拥有 Firebase 实时数据库。使用push()
方法将值插入数据库,该方法生成随机键,并且所有子键值对由Web 客户端存储在子项中。现在,我想通过 android 更新特定子项的一些键值对。例如
KHSIHJKJBNJXKCB -
name="xyz"
age=19
JHGISFUSHFIJDSF -
name="abc"
age=20
如何更新特定键的“年龄”属性,不使用键 KJHUJHDFIUSH
等,就像将年龄更新为 25,其中名称为“abc”。
更新
其中“学生 0”被 Firabase 生成的一些随机值替换。所以我想将值“isCertificateReady”更改为 false。如何在不知道节点密钥的情况下引用特定节点。在本例中,我们可以使用联系电话作为唯一 ID。
我用来解决问题或得到答案的代码
coachingDatabaseReference.orderByChild("contactNumber")
.equalTo(contactNumber)
.addListenerForSingleValueEvent(new ValueEventListener()
@Override
public void onDataChange(DataSnapshot dataSnapshot)
String key = dataSnapshot.getKey();
coachingDatabaseReference.child(key)
.child("isCertificateReady")
.setValue(false);
@Override
public void onCancelled(DatabaseError databaseError)
);
【问题讨论】:
【参考方案1】:为此,您必须使用查询
就像在 Android 中一样myRef.orderByChild("age").equalTo("20").addListenerForSingleValueEvent(...
Query
然后您可以使用datasnapshot.getKey()
调用它的key
然后更新值Update Specific Keys
【讨论】:
我拿不到钥匙。 Listener 永远不会接到任何电话。因为实际上没有值变化所以监听器不会得到任何调用。 @DushyantSuthar 你做得对吗?堆栈上有大量的解决方案可供查看。你能用代码展示你的实现吗? @DushyantSuthar 如果没有当前值,将使用空/null 快照调用 value 侦听器。如果这对您不起作用,请分享minimal code that reproduces the problem。 n 每次启动活动或任何代码时都会调用它。 @FrankvanPuffelen 我添加了更多内容。我希望我会工作。感谢您考虑。【参考方案2】:如果名称不是唯一的,请为您的学生对象添加一些唯一的 ID。 如果我们假设名称是唯一的,那么运行事务并更新内部的特定值是安全的,如下所示。
myRef.orderByChild("name").equalTo("abc").runTransaction(new Transaction.Handler()
@Override
public Transaction.Result doTransaction(MutableData mutableData)
Student s = mutableData.getValue(Student.class);
if (s == null)
return Transaction.success(mutableData);
s.setAge(20);
// Set value and report transaction success
mutableData.setValue(s);
return Transaction.success(mutableData);
@Override
public void onComplete(DatabaseError databaseError, boolean b,
DataSnapshot dataSnapshot)
// Transaction completed
Log.d(TAG, "postTransaction:onComplete:" + databaseError);
);
【讨论】:
以上是关于更新 Firebase 中键的值的主要内容,如果未能解决你的问题,请参考以下文章