【问题标题】:Android Studio - How to get value from FireBase Realtime Database [closed]Android Studio - 如何从 FireBase 实时数据库中获取价值 [关闭]
【发布时间】:2022-01-01 20:04:26
【问题描述】:

我想从 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));

                                        }

*Key 是输入邮箱。

【问题讨论】:

  • 好的,你发布了你想做的事情和一些代码。现在...您的问题是什么? stackoverflow.com/help/how-to-ask
  • 您好,我的问题是如何从 android studio 访问 firebase 值。我在这里发布了我的代码以供访问,但它不起作用@dominicoder
  • 你已经有代码了。它不工作吗?如果不是,为什么不呢?你做了什么来解决这个问题,以及什么 - 确切地说 - 不起作用?你读过吗:firebase.google.com/docs/database/android/read-and-write
  • 虽然@alexmamo 有一个了不起的答案,但更大的图景是......不要使用电子邮件地址作为节点键。它们可能包含您必须处理的非法字符(如您所知),最重要的是,电子邮件地址可以更改......节点密钥不能更改,电子邮件地址可以更改;如果发生这种情况,您将不得不遍历您的整个数据库并读入、删除和重写用作键或引用的每个节点。这可能会变得非常昂贵,而且时间很糟糕。更好的办法是让 Firebase 创建您的节点密钥,并将电子邮件地址存储为子节点。

标签: java android firebase firebase-realtime-database google-cloud-platform


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 2021-05-07
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2021-11-04
    相关资源
    最近更新 更多