当按钮单击一次时,代码在firebase onDatachange中执行两次

时间:2017-06-17 00:22:44

标签: java android firebase firebase-realtime-database

我正在使用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);

1 个答案:

答案 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) {
        ...
    }
});