我之前问了一个问题并不完全清楚。以下是一些用于连接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)的能力。
所有帮助表示赞赏。
答案 0 :(得分:2)
您无法针对Query对象运行事务,该对象可能引用一组未知位置。请注意,GLSL ES 1.00 spec的API文档未显示要调用的runTransaction方法。
如果要执行事务,则只能使用Query对象执行此操作,该对象引用数据库中的单个已知位置。这是交易可以运作的唯一方式。请注意,它有一个DatabaseReference方法。
请详细了解runTransaction。