2016-07-17 22 views
1

ここにボタンのonclickのコードがあります。彼のボタンをクリックすると、firebaseデータベースから電子メールをフェッチする必要があります。電子メールが見つからなかったテキストを見つけました。ここでは、電子メールを取得して、その電子メールを編集テキストで見つけ出すことができましたが、代わりに見つからない電子メールを表示できませんでした。firebaseクエリの使用方法if else condition

W/PersistentConnection: pc_0 - Using an unspecified index. Consider adding '".indexOn": "email"' at /users/users to your security and Firebase rules for better performance

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


      Firebase ref = new Firebase("https://(refrence of firebse database)"); 


      final String searchEmail = emailcon.getText().toString().trim(); 
      final Query query = ref.orderByChild("email").equalTo(searchEmail); 

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

        for (DataSnapshot child : dataSnapshot.getChildren()) 
        { 
         final String fetchEmail; 
         Map<?, ?> value = (Map<?, ?>) child.getValue(); 
         Log.d("main2activity ","User data : "+ value); 
         fetchEmail = (String) value.get("email"); 
         Log.d("main2activity ","User email : "+ fetchEmail); 
         if (searchEmail.equals(fetchEmail)) 
         { 
          emailcon.setText("email found hurray "+query.getRef()); 
         } 
         else 
         { 
          emailcon.setText("still no email found!!"); 
         } 
        } 
       } 
       @Override 
       public void onCancelled(FirebaseError firebaseError) { 

       } 
      }); 
     } 
    }); 
+0

クエリは、一致する電子メールでのレコードだけを返します。 else節は決して実行されないことは明らかです。クエリでレコードが返された場合は、代わりにチェックします。 – Henry

+0

どのようにいくつかのコードを助け、クエリがnullではないが、クエリがnullでないことがわかった場合 – Red

+0

@Henry:これは値リスナーであり、一致する子がない場合にも発生します。 –

答えて

2
コンソールでこれを取得します

クエリを実行すると、0人以上の子を含むスナップショットが取得されます。それはどんな子供が含まれている場合は、これらの子供たちは、あなたがequalTo()

に使用したメールアドレスを持っていますあなたは少し異なるonDataChange()を処理する必要があります。

query.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot.hasChildren()) { 
      for (DataSnapshot child : dataSnapshot.getChildren()) { 
       emailcon.setText("email "+searchEmail+" found at URL "+child.getRef()); 
      } 
     } 
     else { 
      emailcon.setText("still no email found!!"); 
     } 
    } 
    @Override 
    public void onCancelled(FirebaseError firebaseError) { 
    } 
}); 
+0

ありがとうFrank van Puffelenあなたのコードは魅力的に機能しますが、電子メールを受け取ったのかどうかはわかりませんが、上記のエラーがまだ表示されています。 – Red

+0

警告はインデックスを追加する必要があることを意味します。それは文字通り何を追加するかを指示します。 https://firebase.google.com/docs/database/security/indexing-dataをご覧いただくか、エラーメッセージを探してください(これは前に質問されています)。 –

+0

もう一度ありがとう – Red

関連する問題