2016-07-17 5 views
1

hier ist der Code des Onclick der Schaltfläche, was ich tun möchte, ist auf einen Klick auf seine Schaltfläche App muss die E-Mail von der Firebase-Datenbank abrufen, wenn es erfolgreich in Bearbeitung angezeigt werden muss Text, den die E-Mail ansonsten in Edit-text gefunden hat, dass die E-Mail nicht gefunden wurde, hier kann ich die E-Mail abrufen und zeigen, dass die E-Mail gefunden wurde, aber nicht die E-Mail nicht gefunden (sonst Teil des Codes) erhalten diese in der Konsolewie man Firebase-Abfrage in wenn sonst Bedingung

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

Die Abfrage gibt nur die Datensätze mit einer passenden E-Mail. Es ist klar, dass die Else-Klausel nie ausgeführt wird. Überprüfen Sie stattdessen, ob die Abfrage überhaupt Datensätze zurückgegeben hat. – Henry

+0

Wie, Hilfe mit etwas Code, ich überprüft, ob Abfrage ist nicht null aber gefunden Abfrage ist nie null – Red

+0

@Henry: Dies ist ein Wert Listener, wird es auch feuern, wenn es keine passenden Kinder sind. –

Antwort

2

Da Sie eine Abfrage auslösen, erhalten Sie einen Snapshot, der 0 oder mehr untergeordnete Elemente enthalten kann. Wenn es keine Kinder enthält, werden diese Kinder die E-Mail-Adresse haben, die Sie in equalTo()

Sie benötigen, um die onDataChange() Griff etwas anders:

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

danke Frank van Puffelen dein code funktioniert wie charm, aber in der konsole, ob ich email bekomme oder nicht obiger fehler zeigt sich immernoch danke nochmal hat mir sehr geholfen – Red

+0

Die warnung bedeutet dass du einen index hinzufügen musst. Es sagt dir buchstäblich, was du hinzufügen sollst. Rufen Sie https://firebase.google.com/docs/database/security/indexing-data auf oder suchen Sie nach der Fehlermeldung (diese Frage wurde bereits gestellt). –

+0

nochmals vielen Dank – Red

Verwandte Themen