2017-03-01 3 views
0
a2.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     //below 
     DatabaseReference ref = FirebaseDatabase.getInstance().getReference(); 
     ref.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() { 
      @Override 
      public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) { 
       ra2 = dataSnapshot.child("a2").getValue(String.class); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

     //fetching face value 
     ref.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() { 
      @Override 
      public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) { 
       rface = dataSnapshot.child("face").getValue(String.class); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

     //fetching nothingdb which is equals to "zero" in Firebase by default. 

     ref.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() { 
      @Override 
      public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) { 
       nothing = dataSnapshot.child("nothingdb").getValue(String.class); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

     //fetching addeddb which is equals to "one" in Firebase by default. 

     ref.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() { 
      @Override 
      public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) { 
       added = dataSnapshot.child("addeddb").getValue(String.class); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

     //starting if condition 
     if (ra2==nothing){ 

      if (rface==nothing){ 
       a2.setBackgroundResource(R.drawable.rounded);{ 
        Firebase refChild = ref2.child("a2"); 
        refChild.setValue("rounda2"); 
        refChild = ref2.child("face"); 
        refChild.setValue("one"); 
       } 

       else if (rface==added) { 
        a2.setBackgroundResource(R.drawable.crossed); 
        { 
         Firebase refChild = ref2.child("a2"); 
         refChild.setValue("crossa2"); 
         refChild = ref2.child("face"); 
         refChild.setValue("zero"); 
        } 
       } 
      } 
     }); 
    } 
}); 

ボタンをクリックすると、ボタンの背景イメージがFirebaseにあるデータに基づいて変更されますが、If条件が理由で機能しないように、上記のコードを使用しようとしています。AndroidスタジオでFirebaseデータベースを使用しているときにonClick内の「If Condition」が機能しないのはなぜですか?

これはちょうどif (ra2==nothing){と次のif条件を無視します。

+1

RA2と何のデータ型は何ですか? – Kaushal28

+0

equalsメソッドを使って比較 – Kaushal28

+2

もっと重要な問題は、 'onDataChange()'コールバックが非同期であることです。 'on2''、' 'nothing''、' 'added''、' rface''は 'onDataChange()'メソッドがまだ実行されていないので、それらを同等に比較すると有効な結果を含みません。詳細については、この回答を参照してください:http://stackoverflow.com/a/41409942/4815718 –

答えて

1

リスナーonDataChange()コールバックは非同期です。 ra2,nothing,addedおよびrfaceは、onDataChange()のメソッドがまだ実行されていないため、それらを同等に比較すると有効な結果が表示されません。関連する質問へのThis answerは実行順序をより詳細に説明する。

さらに、文字列を比較すると、==演算子は使用できません。 equals()メソッドまたはTextUtils.equals()メソッドを使用する必要があります。 qbixの答え@

+0

非常に@qbixありがとう、私は非同期コールバックについて知りませんでした。それは私の問題を再構成した後に働いた。そして==演算子のアドバイスに感謝します。 –

1

は真である、あなたのif条件が実際に動作しますが、それはまだra2rfacenothing、およびaddedの値を受け取りません。

また、同じリファレンスを聞きながら4種類のValueEventListenerを作成する理由は何ですか?次に、このように、onDataChangeの内側にあなたのif条件を入れてちょうど1リスナーを使用することができます。

a2.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     DatabaseReference ref = FirebaseDatabase.getInstance().getReference(); 
     ref.addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       ra2 = dataSnapshot.child("a2").getValue(String.class); 
       rface = dataSnapshot.child("face").getValue(String.class); 
       nothing = dataSnapshot.child("nothingdb").getValue(String.class); 
       added = dataSnapshot.child("addeddb").getValue(String.class); 

       //starting if condition 
       if (ra2.equals(nothing)) { 
        if (rface.equals(nothing)) { 
         a2.setBackgroundResource(R.drawable.rounded); 
         Firebase refChild = ref2.child("a2"); 
         refChild.setValue("rounda2"); 
         refChild = ref2.child("face"); 
         refChild.setValue("one"); 
        } else if (rface.equals(added)) { 
         a2.setBackgroundResource(R.drawable.crossed); 
         Firebase refChild = ref2.child("a2"); 
         refChild.setValue("crossa2"); 
         refChild = ref2.child("face"); 
         refChild.setValue("zero"); 
        } 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       Log.e(TAG, "onCancelled", databaseError.toException()); 
      } 
     });  
    } 
}); 
+0

ありがとうございます、ValueEventListenerに関するアドバイス。 –

関連する問題