Firebase(android) - 检测事务

时间:2016-11-29 02:04:22

标签: android firebase transactions firebase-realtime-database

我在Firebase上运行一个事务,在事务中我因为非规范化而更新了多个位置。

其中一个更新应该仅在引用存在的情况下,否则,它不应该写入。

据我所知,使用setValueChangedListener是异步的,因此事务将在可以检查值之前结束。

我该怎么做?或者我必须在开始交易之前检查这个值吗?

这是删除非重要事项的方法:

  1. 首先查询用户
  2. 然后更新用户对建筑物的引用
  3. 然后更新建筑物的用户
  4. 然后我想更新另一个对象的用户,但仅限于对象存在,因为它可以每天更改。

    @Override public Transaction.Result doTransaction(MutableData mutableData) {
    
       User user = mutableData.getValue(User.class);
       if (user == null) {
           Log.e(TAG, "User " + userId + " was locally null");
           return Transaction.success(mutableData);
       }
    
       user.couponCode = code.key; //gotten from before
    
       //add code address to user
       user.addresses = new HashMap<String, Address>();
       user.addresses.put(code.key,code.address);
    
       Database.child(Constants.FB_HOUSES).child(code.address.key).child(Constants.FB_RESIDENTS).child(user.key).setValue(user.getUserResidentObject());
    
       //Add new resident to tasks if any
       *** HERE I WANT TO QUERY OTHER PATH TO DO SOMETHING
    
       mutableData.setValue(user);
    
       return Transaction.success(mutableData);
    }
    

0 个答案:

没有答案