Android Studio - 如何从 FireBase 实时数据库中获取价值

Android Studio - How to get value from FireBase Realtime Database

我想从 Firebase 实时数据库获取数据。

Here is my database format

我正在尝试通过提供用户的电子邮件来访问“创建者”的值​​。

例如:

对于输入cc@cc@cc我会得到false。

对于输入tt@tt@tt我会得到真实的。

这是我的代码:

String key = emailEditText.getText().toString().replace(".","@");
myRef.child("Users").child(key).child("creator").addListenerForSingleValueEvent(new ValueEventListener() {
                                @Override
                                public void onDataChange(DataSnapshot snapshot) {
                                    try {
                                        for (DataSnapshot postsnapshot : snapshot.getChildren()) {
                                            if(postsnapshot.getValue().equals(true)){
                                                startActivity(new Intent(LoginActivity.this,CreatorActivity.class));
                                                
                                            }
                                            else
                                                startActivity(new Intent(LoginActivity.this,WelcomeActivity.class));

                                        }

*关键是输入邮箱。

String email = "cc@cc.cc";
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = db.child("Users");
Query queryByEmail = usersRef.orderByChild("email").equalTo(email);
queryByEmail.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DataSnapshot> task) {
        if (task.isSuccessful()) {
            for (DataSnapshot ds : task.getResult().getChildren()) {
                boolean creator = ds.child("creator").getValue(Boolean.class);
                Log.d("TAG", "creator: " + creator);
            }
        } else {
            Log.d("TAG", task.getException().getMessage()); //Don't ignore potential errors!
        }
    }
});

logcat 中的结果将是:

creator: false

但是,如果您将电子邮件更改为:

String email = "tt@tt.tt";

logcat 中的结果将是:

creator: true

此解决方案适用于数据库中的多个节点。如果您只想检查一个,请使用以下代码行:

String email = "cc@cc@cc";
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference creatorRef = db.child("Users").child(email).child("creator");
creatorRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DataSnapshot> task) {
        if (task.isSuccessful()) {
            DataSnapshot snapshot = task.getResult()
            boolean creator = snapshot.getValue(Boolean.class);
            Log.d("TAG", "creator: " + creator);
        } else {
            Log.d("TAG", task.getException().getMessage()); //Don't ignore potential errors!
        }
    }
});

logcat 中的结果将是:

creator: false

但是,如果您将电子邮件更改为:

String email = "tt@tt@tt";

logcat 中的结果将是:

creator: true