首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从onDataChange()中提取数据的时间有点晚

从onDataChange()中提取数据的时间有点晚
EN

Stack Overflow用户
提问于 2021-01-30 16:40:57
回答 1查看 33关注 0票数 0

我想检查是否存在具有特定电子邮件的密钥。如果存在,我需要获取键的值(应用程序中用户的唯一id ),并检查应用程序中输入的id是否与从数据库中获取的id匹配。但问题是,我的onDataChange()在我执行相等性检查之后会做出响应。可以做些什么呢?

代码语言:javascript
运行
复制
rootRef.child("shortlisted").child(email1).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NotNull DataSnapshot snapshot) {
            try {
                if (snapshot.getValue() != null) {
                    try {

                        aac = snapshot.getValue().toString();
                        System.out.println("STRINGAAC"+aac);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                } else {
                    //user doesnt exist
                    Log.e("TAG", " it's null.");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
    System.out.println("STRINGAAC"+aac);
    if(aac.equals("not found"))
    {
        Toast.makeText(globalContext,"not found", Toast.LENGTH_SHORT).show();
    }
    if(aac.equals(aacid_s))
    {
        Toast.makeText(globalContext,"Key Matched value", Toast.LENGTH_SHORT).show();
    }
    else
    {
        Toast.makeText(globalContext,"Key un-Matched value", Toast.LENGTH_SHORT).show();
    }
EN

回答 1

Stack Overflow用户

发布于 2021-01-30 16:58:54

这是一个正常的行为,因为firebase API是异步的,这基本上意味着当你运行上面的代码时,onDataChange()之后的代码甚至在检索完整数据之前就会被调用。因此,要解决此问题,您必须执行以下操作:

代码语言:javascript
运行
复制
rootRef.child("shortlisted").child(email1).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NotNull DataSnapshot snapshot) {
            try {
                if (snapshot.getValue() != null) {
                    try {

                        aac = snapshot.getValue().toString();
                        System.out.println("STRINGAAC"+aac);
                        if(aac.equals("not found"))
                        {
                         Toast.makeText(globalContext,"not found", Toast.LENGTH_SHORT).show();
                        }
                        if(aac.equals(aacid_s))
                        {
                         Toast.makeText(globalContext,"Key Matched value", Toast.LENGTH_SHORT).show();
                        }
                        else
                        {
                         Toast.makeText(globalContext,"Key un-Matched value", Toast.LENGTH_SHORT).show();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                } else {
                    //user doesnt exist
                    Log.e("TAG", " it's null.");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65966120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档