【发布时间】:2018-01-02 09:02:40
【问题描述】:
我有一个类似这样的代码:
change_status_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mfirebasedatabase.getReference().child("genre_items").child(genre_status_selected).child(genreitem_status_selected).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(genre_status_selected!="" && genreitem_status_selected!="" && dataSnapshot.child("status").getValue().equals("available"))
{
mfirebasedatabase.getReference().child("genre_items").child(genre_status_selected).child(genreitem_status_selected).child("status").setValue("unavailable");
}
else if(genre_status_selected!="" && genreitem_status_selected!="" && dataSnapshot.child("status").getValue().equals("unavailable"))
{
mfirebasedatabase.getReference().child("genre_items").child(genre_status_selected).child(genreitem_status_selected).child("status").setValue("available");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
每当我单击更改状态按钮时,它都会更改状态,但是由于它位于 onDataChange 中,因此会导致无限循环...无限次更改其状态...如何摆脱这种情况?如何摆脱这个循环?我只想改变它的状态一次。
【问题讨论】:
-
我能想到的唯一解决方案是创建一个
ValueEventListener类型的全局变量。然后你可以设置它,当发生变化时,你可以删除监听器,改变你已经在做的值,然后重新设置监听器。顺便说一句,您以错误的方式比较字符串;您应该使用equals来比较字符串对象 -
使用 addListenerForSingleValueEvent 代替 ValueEventListener。为什么你在 onclick 监听器中使用 ValueEventListener ?
标签: android firebase firebase-realtime-database infinite-loop