我想从我的firebase数据库中获取一个键值对列表,根据某些条件删除一对,然后将列表发送回我的数据库。列表中的对数可以增大或缩小。我想使用一个事务,因为我想确保列表没有被其他人修改。这是我的代码:
mFirebaseDatabase.getReference().child("mychild").runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
Log.d("bloup", mutableData.toString());
Log.d("bloup", String.valueOf(mutableData.getChildrenCount()));
Map <String,String> myDataBaseData = mutableData.getValue(HashMap.class);
Log.d("bloupp", "bloupp");
Log.d("bloupp", myDataBaseData.toString());
// loop all result
for (final MutableData postSnapshot : mutableData.getChildren()) {
if (mycondition) {
myDataBaseData.remove(postSnapshot.getKey().toString());
break;
}
}
mutableData.setValue(myDataBaseData);
return Transaction.success(mutableData);
}
以下是我在日志中的内容:
bloupopp:MutableData {key =,value = {abc = 123,def = 456,ghi = 789}}
bloupopp:3
所以我想
存在问题Map <String,String> myDataBaseData = mutableData.getValue(HashMap.class);
但我不明白为什么。有什么想法吗?
答案 0 :(得分:0)
我刚刚找到了如何让它发挥作用,我改变了
Map <String,String> myDataBaseData = mutableData.getValue(HashMap.class);
通过
Map <String,String> myDataBaseData = (Map) mutableData.getValue;
我不知道为什么但是它有效,我现在调用doTransaction中的所有代码:D
This answer帮助了我。