Firebase - 如何获取交易中的键值对列表(Android)?

时间:2018-03-15 17:37:35

标签: android firebase firebase-realtime-database

我想从我的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);

但我不明白为什么。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我刚刚找到了如何让它发挥作用,我改变了

Map <String,String> myDataBaseData = mutableData.getValue(HashMap.class);

通过

Map <String,String> myDataBaseData = (Map) mutableData.getValue;

我不知道为什么但是它有效,我现在调用doTransaction中的所有代码:D

This answer帮助了我。