我正在使用firebase onDataChange更新firebase实时数据库中的数据,并在用户单击按钮时使用以下代码。当点击一个按钮时,onDataChange方法中的所有代码都执行一次,但编号为#1的代码是一个'意图活动'即使我单击按钮一次也会执行两次。可能是什么问题?
if (dataSnapshot.child(uid2).hasChild(postID2))
{
//Create matches node
databaseReference1.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.child("Male").hasChild(postUser_id)) {
// view.setEnabled(false);
databaseReference2.child(user_id).child(postUser_id).setValue(username2);
databaseReference3.child(user_id).child(postUser_id).setValue(username2);
databaseReference5.child(uid1).child(user_id).setValue(new Match1(username1,currentUser_username2,postpicf,user_id));
databaseReference5.child(user_id).child(uid1).setValue(new Match1(username2,currentUser_username1,postpicm,uid1));
//#6 databaseReference6.child(uid1).push().setValue("New Friendc");
Intent profileIntent = new Intent(getActivity(), MatchView.class);
profileIntent.putExtra("postID", postUser_id);
startActivity(profileIntent);
答案 0 :(得分:0)
根据您对处理的描述,您需要read the data once并且应该使用addListenerForSingleValueEvent()
而不是addValueEventListener()
,这会使听众附加。执行多次发布的代码会导致多个活动侦听器,并在数据发生更改时多次触发onDataChange()
。
databaseReference1.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
...
}
@Override
public void onCancelled(DatabaseError databaseError) {
...
}
});