Firebase updatechildren 与 setvalue
Firebase updatechildren vs setvalue
我在 Firebase 上遇到 valueEvenListener 问题。考虑情况:
Firebase ref = new Firebase(Constant.BASEURL).child("myLists");
ref.addValueEventListener(myValueEventListener);
然后我尝试使用 updateChildren() 更新其中一个列表值。
HashMap<String, Object> newEditionTimeHM = new HasMap<String, Object>
newEditionTimeHM.put("editionTimeStamp", ServerValue.TIMESTAMP);
ref.child(pushKey).updateChildren(newEditionTimeHM);
它会更新,但是当我的侦听器捕获到更新时,它会崩溃并报告 "failed to bounce to type" 错误。
第二次尝试时,我使用我想要的新值创建了一个新的 shoppinList 对象,并使用 setValue() 推送它。
newEditionTimeHM.put("editionTimeStamp", ServerValue.TIMESTAMP);
ShoppingList shoppingList = new ShoppingList("Owner unknown", newEditionTimeHM);
ref.child(pushKey).setValue(shoppingList);
当我的听众听到它时,没有报告任何问题。
这里有什么区别?为什么我需要创建一个全新的对象来满足听众?使用updateChildren()不是更高效吗?
已搜索 this page 答案但未找到。
ServerValue.TIMESTAMP
的类型是 Map<String, String>
,所以如果你的 pushKey 是 "<your Firebase URL>/myLists"
:
,我猜你在 Firebase 中的数据结构与此相关
"myLists": {
"editionTimeStamp": {
"timeStampKey": "timeStampValue"
}
}
所以,如果你想获得 TIMESTAMP
值,我建议你的第一个尝试必须是:
ref.child("<your Firebase URL>/myLists/editionTimeStamp/timeStampKey");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
String timeStampValue = (String)snapshot.getValue();
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
如果这不是您的解决方案,这里有一个关于此错误的很好的解释:
希望对你有帮助:D
好的。发现了问题。我意识到阅读 this page 和上面的答案我误解了 firebase 侦听器的工作方式。对 setValue() 和 updateChildren() 的反应有所不同。确保在更新后检查您需要的值,并相应地使用 ChildEventListener 或 ValueEventListener。
生活又美好了!干杯!
我在 Firebase 上遇到 valueEvenListener 问题。考虑情况:
Firebase ref = new Firebase(Constant.BASEURL).child("myLists");
ref.addValueEventListener(myValueEventListener);
然后我尝试使用 updateChildren() 更新其中一个列表值。
HashMap<String, Object> newEditionTimeHM = new HasMap<String, Object>
newEditionTimeHM.put("editionTimeStamp", ServerValue.TIMESTAMP);
ref.child(pushKey).updateChildren(newEditionTimeHM);
它会更新,但是当我的侦听器捕获到更新时,它会崩溃并报告 "failed to bounce to type" 错误。
第二次尝试时,我使用我想要的新值创建了一个新的 shoppinList 对象,并使用 setValue() 推送它。
newEditionTimeHM.put("editionTimeStamp", ServerValue.TIMESTAMP);
ShoppingList shoppingList = new ShoppingList("Owner unknown", newEditionTimeHM);
ref.child(pushKey).setValue(shoppingList);
当我的听众听到它时,没有报告任何问题。
这里有什么区别?为什么我需要创建一个全新的对象来满足听众?使用updateChildren()不是更高效吗? 已搜索 this page 答案但未找到。
ServerValue.TIMESTAMP
的类型是 Map<String, String>
,所以如果你的 pushKey 是 "<your Firebase URL>/myLists"
:
"myLists": {
"editionTimeStamp": {
"timeStampKey": "timeStampValue"
}
}
所以,如果你想获得 TIMESTAMP
值,我建议你的第一个尝试必须是:
ref.child("<your Firebase URL>/myLists/editionTimeStamp/timeStampKey");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
String timeStampValue = (String)snapshot.getValue();
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
如果这不是您的解决方案,这里有一个关于此错误的很好的解释:
希望对你有帮助:D
好的。发现了问题。我意识到阅读 this page 和上面的答案我误解了 firebase 侦听器的工作方式。对 setValue() 和 updateChildren() 的反应有所不同。确保在更新后检查您需要的值,并相应地使用 ChildEventListener 或 ValueEventListener。 生活又美好了!干杯!