繁体   English   中英

如何从Firebase数据库中检索包含特定数据的数据

[英]How to Retrieve data from Firebase Database with particular data

我的Firebase中的数据库结构

我想从数据库中检索数据。 例如:我只想从数据库中获取用户名和密码,下一步该怎么做?

public void loginToSystem(String usernameLogin, String passwordLogin){
    usernameLogin = username.getText().toString();
    passwordLogin = password.getText().toString();

    if(TextUtils.isEmpty(usernameLogin)){
        username.setError("Please Input Username");
        return;
    }
    else if(TextUtils.isEmpty(passwordLogin)){
        password.setError("Please Input Password");
        return;
    }
    else {

        Query query1 = databaseReference.orderByChild("usnername").equalTo(usernameLogin);
        Query query2 = databaseReference.orderByChild("password").equalTo(passwordLogin);

        //What Should I do Here 
    }
}

我应如何处理《守则》。

附言:我正在使用DatabaseReference,并且我正在使用此方法进行登录吗? 或者我必须使用FireAuth分隔我的数据用户名和密码,并使用Firebase数据库分隔我的个人数据

您需要添加ValueEventListener才能检索数据:

Query query1 = databaseReference.orderByChild("username").equalTo(usernameLogin);
query.addValueEventListener(new ValueEventListener() {
 @Override
public void onDataChange(DataSnapshot dataSnapshot) {
 for(DataSnapshot datas: dataSnapshot.getChildren()){
   String address=datas.child("address").getValue().toString();
  }
}

 @Override
public void onCancelled(DatabaseError error) {

  }
});

同样,每个侦听器只能使用一个orderByChild

您无需在数据库中添加密码,因为它存储在firebase auth中。 另外,您使用的是push()生成的随机ID。 由于您正在使用Firebase Auth,因此获取用户ID并将数据添加到其中。

FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
String userid=user.getUid();

那么您将拥有:

Users
  userid
    address: address_here
    name: name_here
    email:email_here

您可以做的是,当用户单击登录按钮时,您可以在要监听的节点上添加ValueEventListener,然后您将获得来自该节点的全部数据,然后我们可以检查用户名和密码是否正确包含在节点中,则您可以登录或保存适合您情况的数据。

我通过单击登录按钮尝试了相同的逻辑,它对我有用。 请尝试以下代码。

DatabaseReference ref = mDatabaseReference.child("YOUR NODE NAME");
                ref.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
                            HashMap<String,String> map = (HashMap<String,String>)dataSnapshot1.getValue();
                            if (map.get("username").equals("USERNAME THAT TO BE CHECKED")){
                                Log.d("Testing","True "+map.get("name"));
                            }
                            else {
                                Log.d("Testing","True "+map.get("name"));
                            }
                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });

希望它能工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM