2017-05-03 47 views
0

我的应用程序允许您在添加播放器到节点后添加我使用以下方法通过phoneNum进行搜索以查看该播放器是否存在于“用户”节点中。Firebase DataSnapshot空值

我遇到问题的地方是我需要能够在找到的匹配节点中从用户的datasnapshot访问值。例如返回用户ID的值。当我尝试它时,它一直显示为一个空值,当我尝试登录到控制台时,它抱怨说它是一个空值,因为if语句应该处理这个事情,所以它没有意义。

该方法能够找到玩家是否存在于用户节点中,并显示Toast消息来表明这一点。

Data Structure

代码:

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"); 
    } 
} 

回答

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) { 
      } 
     }); 

使用此检查是否存在没有数据。

+0

由于RISHABH,这种执行方式与上述相同的代码来实现它。它指示吐司消息说它找到了匹配,但是当我尝试获得它输出的值为空 –

0

你需要在两个步骤做到这一点,首先检查用户是否存在。那么你通过你的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"); 
     } 
    } 

通过userId获取用户信息。 mDatabaseReference与之前相同。将其定义为成员字段。

 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); 
     } 

您的用户Pojo应该像下面那样。

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

谢谢大家我管理通过使用childEventListener

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) { 

     } 
    }); 
} 
相关问题