之前我问了一个不清楚的问题。以下是用于在Android应用中连接到Firebase数据库的一些代码;

public void updateDBMatches(final String fieldUpd, final Object valueUpd) {
    String getArgument = getArguments().getString("matchid");
    final DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Matches").child("Match_01");

    //final DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Matches").orderByChild("gameID").equalTo(getArgument);;

    ref.runTransaction(new Transaction.Handler() {
        @Override
        public Transaction.Result doTransaction(MutableData mutableData) {
            Map<String, Object> updates = new HashMap<String,Object>();
            updates.put(fieldUpd, valueUpd);
            ref.updateChildren(updates);
            return null;
        }
        @Override
        public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {
        }
    });
}


我想实现的注释行(最终DatabaseReference ....)是我要实现的,但是我无法传递查询(它在equalTo处中断)。如果我重新编写代码以引用传递给查询对象的数据库连接,则会失去将更新放入事务块(.runTransaction)的功能。

所有帮助表示赞赏。

最佳答案

您无法针对Query对象运行事务,而该Query对象可能引用了一组未知的位置。请注意,Query的API文档未显示调用runTransaction的方法。

如果要执行事务,则只能使用DatabaseReference对象执行该操作,该对象引用数据库中的单个已知位置。这是交易可以操作的唯一方式。请注意,它具有runTransaction方法。

请阅读有关transactions的更多信息。

10-08 06:14