查询firebase数据库并检索特定数据

时间:2018-05-18 16:48:03

标签: android firebase-realtime-database

我有一个使用Firebase数据库的Android应用程序。 Firebase database structure looks like

我想要什么 我有输入字段作为用户名。当用户输入他的用户名时,我想检查该用户是否存在。如果是,请允许他登录。

[你可以看到用户名:] [2]

我想获得此用户名。我尝试了一些代码,但它没有得到我想要的东西。

这是代码示例:

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

            for (DataSnapshot child: dataSnapshot.getChildren())
            {
                UserData userData = child.getValue(UserData.class);
                if(c_user_name == null)
                {
                    c_user_name= " ";
                }
                online_user_id=c_user_name+userData.getmUser_name();
                c_user_name=online_user_id.toString();
                Log.v("E_VALUE","User_new:"+c_user_name);

            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

我得到的是什么错误 无法将java.lang.String类型的对象转换为类型packagename.UserData

这是我的UserData类

public class UserData {
    String mUser_name,mUser_email;

    public UserData() {
    }

    public UserData(String mUser_name, String mUser_email) {
        this.mUser_name = mUser_name;
        this.mUser_email = mUser_email;
    }

    public String getmUser_name() {
        return mUser_name;
    }

    public String getmUser_email() {
        return mUser_email;
    }
}

1 个答案:

答案 0 :(得分:0)

这可以通过使用 orderByChild 来实现,并使用 addListenerForSingleValueEvent ,因为您只想阅读一次。

检查以下代码:

mUserRef.orderByChild("User_Name").equalTo("usernameInputFieldText").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

      if(dataSnapshot.exists)
       {
          /// username exsits
       }
      else
     {
        /// user name doesn't exists
       }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});