2017-03-29 12 views
0

firebaseデータベースでノード値を削除またはヌルに設定しようとしていますが、ボタンを押さずにonClickリスナー内のメソッドが実行されています。ボタンがクリックされていなくてもボタンonclickのメソッドが実行されています

btn_cancel.setOnClickListener(new View.OnClickListener() 
      { 
       @Override 
       public void onClick(View v) { 

        DatabaseReference myRef = database.getReference("Orders").child(user_id); 

        myRef.addValueEventListener(new ValueEventListener() 
        { 
         @Override 
         public void onDataChange(DataSnapshot dataSnapshot) 
         { 

          myRef.child("Session").setValue(null); 
          // myRef.child("Dabba Type").removeValue(); 
          // myRef.child("Start date").removeValue(); 
          // myRef.child("End date").removeValue(); 
          // myRef.child("Address").removeValue(); 

         } 

         @Override 
         public void onCancelled(DatabaseError databaseError) 
         { 

         } 
        }); 
+3

ブレークポイントを設定し、特定の場合には、このラインは、これまで実行し確認し、多分あなたは... – miljon

+0

たびに問題を引き起こしていることをどこかのコードを持っているのに役立ちます

@Override public void onClick(View v) { DatabaseReference myRef = database.getReference("Orders").child(user_id); myRef.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (dataSnapshot.getValue(Boolean.class)) { // if value is true, change data myRef.setValue(false); ... 

希望:そして、この場合には、あなたはこのようにそれを行う必要があります最初にボタンをクリックすると、コードは 'ValueEventListener'を設定します(値が変更されたときに自動的に' onDataChange'が呼び出されます) – sudo

+0

それで自動的に実行されないようにするには –

答えて

1

データの変更/変更のみを行う場合は、setValue()だけで十分です。 addValueEventListenerを添付する必要はありません。このように:あなたがまた読みたい場合は

public void onClick(View v) { 
    database.getReference("Orders").child(user_id).child).child("Session").setValue(null); 
} 

追加情報(多分問題のコードに適用された場合は動作しませんが、おそらくこの情報は有用であること)

変更をコミットする前にまず値を設定してください(trueの場合はtrue、それ以外の場合はfalseに変更してください)。addValueEventListenerの代わりにaddListenerForSingleValueEventを使用することを検討してください。一度コードを実行するのは一度だけですが、後ではリスナを削除/切り離すまでデータの変更を聴いています。これは

関連する問題