【发布时间】:2018-05-30 15:08:20
【问题描述】:
Android 的 Firebase 数据库 api 非常令人困惑。
我想更新json 对象的某些部分,但我不能。这是firebase数据库。
首先用户创建词汇,遵循这段代码
/* reference of /vocabulary/{user_id}/*/
final DatabaseReference vocabularyRef = FBDatabaseReference.getAllVocabulary(user);
if (!TextUtils.isEmpty(oldName)){
// if vocabulary renamed remove preview
vocabularyRef.child(oldName).removeValue();
}
// set user vocabulary
vocabularyRef.child(String.valueOf(userVocabulary.name())).
setValue(new FBVocabulary(userVocabulary), completionListener);
如果词汇表已成功创建,用户可以将单词添加到其中。
但是添加单词后,用户可以修改词汇表name或color等。那段时间我丢失了所有单词,因为词汇表对象已经重新创建。
根据 Firebase doc for update a child 我应该 addListenerForSingleValueEvent 或 addValueEventListener
当我使用addListenerForSingleValueEvent 而不是预览代码时,用户无法创建词汇表。
如果尚未创建引用,则在编写的 firebase 文档中,快照对象为空。
/* reference of /vocabulary/{user_id}/vocabulary3/ */
final DatabaseReference vocabularyRef = FBDatabaseReference.getAllVocabulary(user).child("vocabulary3");
vocabularyRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Object value = dataSnapshot.getValue();
if (value == null){
dataSnapshot.getRef().setValue(new FBVocabulary(userVocabulary), completionListener);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
在这种情况下,每次调用onCancelled(DatabaseError databaseError) 异常:权限被拒绝。据我了解是因为引用是null。
我可以检查引用是否存在吗?然后更新数据。
如何在第一次使用
addValueEventListener?
【问题讨论】:
-
您在使用监听器时尝试的代码是什么?你还想更新什么?如果您正在更新
vocabulary1并且words节点在其中,那么是的,它将被覆盖 -
@Peter Haddad 我要更新词汇数据,没有词,用户词不能更改
标签: java android json firebase firebase-realtime-database