Android Firebase runTransaction()执行无限循环
我目前正在尝试实现一种方法来计算我的数据库帖子在用户屏幕上显示的次数。为了管理可能同时进行的修改,我决定使用Android Firebase runTransaction()执行无限循环,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我目前正在尝试实现一种方法来计算我的数据库帖子在用户屏幕上显示的次数。为了管理可能同时进行的修改,我决定使用runTransition()方法。我在用于填充viewHolder的方法中调用此方法 然而,runTransition()方法进行无限循环,并不断增加我的nb_views计数器-即使应用程序仅在一部带有固定新闻源的手机上运行 下面是我的代码的样子: private void setupPost(final PostViewHolder postViewHolder, final Post
runTransition()
方法。我在用于填充viewHolder的方法中调用此方法
然而,runTransition()
方法进行无限循环,并不断增加我的nb_views
计数器-即使应用程序仅在一部带有固定新闻源的手机上运行
下面是我的代码的样子:
private void setupPost(final PostViewHolder postViewHolder, final Post post, final int position, final String inPostKey) {
/.../
DatabaseReference ref = (FirebaseUtil.getPostsRef()).child(postKey).child("nb_views");
ref.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
if (mutableData.getValue() != null) {
long nb = (long) mutableData.getValue();
mutableData.setValue(nb + 1);
}
else {
mutableData.setValue(1);
}
return Transaction.success(mutableData);
}
@Override
public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {
Log.d(TAG, "postTransaction:onComplete:" + databaseError);
}
});
/.../
每次调用onComplete()
方法时都不会出现任何错误。最令人惊讶的是,整个setupPost()
方法被无限期调用。当我删除runTransaction()
方法时,一切正常,并且setupPost()
方法对于每个post只调用一次
你知道我为什么会得到一个无限循环吗?我想我回答得太晚了,但可能对某些人有帮助 在执行firebase runTransaction()时,会重复调用setupPost()方法,因为调用此活动的此活动(或片段)或上一个活动(或片段)中的某个地方是同一firebase子级上的值侦听器,该子级调用setupPost()方法每次在数据库中的值发生更改时
将所有值侦听器更改为单值侦听器,您的问题将得到解决。我打赌(好吧,使用常识)setupPost是从onDataChange调用的,onDataChange的名称是在数据更改时调用的。。。很明显,这项交易已经完成了……嗯,是的,事实就是这样。。。我觉得自己很笨。我想我只是要计算post对象本身之外的视图。谢谢