2017-05-03 2 views
0

Meine App ermöglicht das Hinzufügen eines Players zu einem Knoten, sobald sie hinzugefügt wurden Ich verwende die folgende Methode, um nach phoneNum zu suchen, um festzustellen, ob dieser Player im Knoten 'users' existiert.Firebase DataSnapshot Nullwerte

Wo ich Probleme habe ist, dass ich in der Lage sein muss, auf die Werte aus dem datasnapshot für den Benutzer innerhalb des gefundenen übereinstimmenden Knotens zugreifen zu können. Zum Beispiel den Wert der Benutzer-ID zurückgeben. Wenn ich dies versuche, wird es weiterhin als Nullwert angezeigt, und wenn ich versuche, mich an der Konsole anzumelden, beschwert es sich, dass es ein Nullwert ist, der keinen Sinn ergibt, da die if-Anweisung darauf achten sollte.

Die Methode kann feststellen, ob ein Player im Benutzerknoten vorhanden ist, und eine Toast-Nachricht anzeigen, um dies anzuzeigen.

Data Structure

Code:

public void checkPlayerNum(final String phoneNum) { 
     DatabaseReference mDatabaseReference = 


     FirebaseDatabase.getInstance().getReference().child("users"); 

    if (!TextUtils.isEmpty(phoneNum)) { 
     final Query phoneNumReference = mDatabaseReference.orderByChild("phoneNum").equalTo(phoneNum); 

     ValueEventListener phoneNumValueEventListener = new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       if (dataSnapshot.getValue() != null) { 
        // String key = String.valueOf(dataSnapshot.getValue()); 
        User mUser = dataSnapshot.getValue(User.class); 

        String uId = mUser.getUid(); 

        // Log.d("TAG",uId); 
        Toast.makeText(getApplicationContext(), "* found **"+ uId , Toast.LENGTH_LONG).show(); 
       } else { 
        Toast.makeText(getApplicationContext(), "****NOT FOUND****", Toast.LENGTH_LONG).show(); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) {} 
     }; 

     phoneNumReference.addListenerForSingleValueEvent(phoneNumValueEventListener); 


    } else { 
     Log.e("Error","phoneNum is null"); 
    } 
} 

Antwort

1
final Query query = mFirebaseDatabase.orderByChild("phoneNum").equalTo("userPhoneNumber"); 
     query.addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       if (dataSnapshot.exists()) { 
        //here means the value exist 
        //do whatever you want to do 
       } else { 
        //here means the value not exist 
        //do whatever you want to do 
       } 
      } 

      @Override 
      public void onCancelled(FirebaseError firebaseError) { 
      } 
     }); 

verwenden um zu überprüfen, ob die Daten vorhanden sind oder nicht.

+0

Dank Rishabh, diese über die gleiche Art und Weise wie der Code ausführt. Er markiert die Toast-Nachricht, die besagt, dass die Übereinstimmung gefunden wurde, aber wenn ich versuche, den Wert zu erhalten, wird er als Null ausgegeben –

0

Sie müssen dies in zwei Schritten tun, zuerst prüfen, ob der Benutzer existiert. dann erhalten Sie Benutzerinformationen von Ihrer userId.

DatabaseReference mDatabaseReference; 

public void checkPlayerNum(final String phoneNum,final String userId) { 
      mDatabaseReference = 
       FirebaseDatabase.getInstance().getReference().child("users"); 

     if (!TextUtils.isEmpty(phoneNum)) { 
      final Query phoneNumReference = mDatabaseReference.orderByChild("phoneNum").equalTo(phoneNum); 

      ValueEventListener phoneNumValueEventListener = new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        if (dataSnapshot.getValue() != null) { 
         // user exists 
         getUserInf(userId); 

        } else { 
         Toast.makeText(getApplicationContext(), "****NOT FOUND****", Toast.LENGTH_LONG).show(); 
        } 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) {} 
      }; 

      phoneNumReference.addListenerForSingleValueEvent(phoneNumValueEventListener); 


     } else { 
      Log.e("Error","phoneNum is null"); 
     } 
    } 

Benutzerinformationen erhalten Sie durch userId. mDatabaseReference ist das gleiche wie zuvor. Definieren Sie es als Mitgliedsfeld.

 void getUserInf(String userId) { 
      userValueEventListener = new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        // get user data 
        User mUser = dataSnapshot.getValue(User.class); 

       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }; 
      mDatabaseReference.child(userId).addListenerForSingleValueEvent(userValueEventListener); 
     } 

Ihr Benutzer Pojo sollte wie folgt sein.

public class User { 
    String email,name,phoneNum,uid; 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getPhoneNum() { 
     return phoneNum; 
    } 

    public void setPhoneNum(String phoneNum) { 
     this.phoneNum = phoneNum; 
    } 

    public String getUid() { 
     return uid; 
    } 

    public void setUid(String uid) { 
     this.uid = uid; 
    } 
} 
0

Dank jeder schaffte ich es zu erreichen, indem

childEventListener mit
public void checkingNumber(final String phoneNum){ 
    DatabaseReference mDatabaseReference = 
      FirebaseDatabase.getInstance().getReference().child("users"); 
    final Query query = mDatabaseReference; 
    query.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      if (dataSnapshot.getValue() != null) { 
       // String key = String.valueOf(dataSnapshot.getValue()); 
       User mUser = dataSnapshot.getValue(User.class); 

       // String uId = mUser.getUid(); 
       // usersDatabase.child(mUser.getUid()); 
       // Log.d("TAG",uId); 
       if(mUser.getPhoneNum().equals(phoneNum)) { 
        String uId= mUser.getUid(); 
        String email = mUser.getEmail(); 
        String name = mUser.getName(); 
        Toast.makeText(getApplicationContext(), "* found **" + " " + uId + " " + " " + email + " " + name, Toast.LENGTH_LONG).show(); 
       } 
      } else { 
       Toast.makeText(getApplicationContext(), "****NOT FOUND****", Toast.LENGTH_LONG).show(); 
      } 
     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
} 
Verwandte Themen