- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
值事件监听器在每个 Activity 中都正常工作。但在我的注册 Activity 中,花费了超过 2 分钟。我不知道为什么。
这是我的方法
private void verifyuserinput() {
System.out.println("Verifying User Input");
userRef.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
System.out.println("Verifying Username");
if (dataSnapshot.hasChild(username.getText().toString())){
Toast.makeText(Signup.this, "Username doesn't exist", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
这是我的完整注册代码 https://pastebin.com/fidvpRLE
两次打印的时间差为2min+
另外,在那两分钟内它消耗了如此多的数据。比如每秒 1MBps,持续 2 分钟。
日志
07-01 21:56:25.315 21504-21504/com.aye.chat I/System.out: Verifying User Input
07-01 21:58:01.960 21504-21504/com.aye.chat I/System.out: Verifying Username
有时差。
Firebase 引用仅包含作为子项的用户名以及接下来的所有信息。所以我只想检查用户名是否存在。
正如我所说,除了这个类之外,它在任何地方都可以正常工作。请需要帮助..
最佳答案
您正在下载 userRef
下的所有数据,以验证该特定用户是否存在。这是一种浪费,而且更糟糕:随着用户数量的增加,它会浪费更多的数据。
要验证特定用户是否存在,您应该寻找一种仅需要读取单个用户节点的解决方案。从查看您当前的代码来看,可以通过以下方式完成:
userRef.child(username.getText().toString()).addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
System.out.println("Verifying Username");
if (dataSnapshot.exists()){
Toast.makeText(Signup.this, "Username doesn't exist", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException(); // don't ignore errors
}
});
上面的代码将监听器附加到 JSON 树中的下一层,即您要检查的节点上。这会将其从 O(n)
更改为 O(1)
操作。
代码中的条件似乎颠倒了:当数据显示用户不存在时,打印用户不存在。但由于您的代码 fragment 中存在相同的逻辑,因此我决定不对其进行修改。
关于java - Firebase Valueeventlistener 花费了很多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44863319/
我有一个 Firebase valueEvent 监听器: questions.orderByChild("CategoryID").equalTo(categoryID)
我正在使用 ValueEventListeners 从 Firebase 数据库中检索数据。现在我想从查询中删除 ValueEventListener。像这样: query.removeEventLi
出于某种原因,当我在 fragment 中调用 getTitle() 时,它总是返回 null。似乎根本没有添加 ValueEventListener。 当我在监听器内调试或打印 title 的值时,
单击按钮后,我需要从 Firebase 实时数据库获取昵称值。所以我在按钮的 onClick 方法中创建了 singleValueListner() 。但这不起作用。 我尝试过调试它,但代码没有进入s
值事件监听器在每个 Activity 中都正常工作。但在我的注册 Activity 中,花费了超过 2 分钟。我不知道为什么。 这是我的方法 private void verifyuserinpu
我有一个 valueEventListener() 用于从 Firebase 获取数据。 这是第一个。 sectionReference.child(classID).addValueEventLis
我有这个标准的 Firebase 调用: ref.child("user/toys/-K2873267832") .addListenerForSingleValueEvent(new Valu
应用说明 我的应用程序从 Firebase 数据库中检索数据。首先,我将 java 对象正确推送到数据库,并且可以毫无问题地检索数据,使用 Fragments onActivityCreated 中的
我有一个名为“bg”的全局变量。它在 firebase 数据库引用“myRef”的 ValueEventListener 中初始化 但是如果我尝试在 valueeventlistener block
DatabaseReference Ref = FirebaseDatabase.getInstance().getReference(Constants.Client + "/" + path);
我正在尝试使用信号量来等待我的 firebase valueEventListener。我有一个用户信息 Activity ,其中包含用户必须填写的 6 个不同字段。当用户保存他/她的信息时,我想进行
我正在尝试从 Firebase 获取字符串列表,只有在检索到所有数据后,我才会更新我的 UI。目前我在 fragment 类中使用以下代码来实现此目的。 taskList = new ArrayLis
在我下面的代码中,函数 setPhoto(url) 始终接收空 url,但如果我通过单击按钮调用另一个函数并且它需要该 url,它就会正确接收数据。 @Override protected void
我正在尝试使用代码 straight from their documentation 从 Firebase 数据库中读取数据。我的代码如下,当我尝试将 ValueEventListener 添加到我
我有一个使用 Google Firebase 的 Android 应用。 我需要下载带有随机 ID 的图像。 我有一个函数必须返回随机图片的位图。在此函数中,我从单独的数据库条目中读取图片数量,然后生
我正在尝试检测 Firebase 数据库中的值更改。这是我初始化 ValueEventListener 的代码: valueEventListener = new ValueEventListener
我的 Android 应用中遇到了 Firebase 实时数据库的问题。 我正在尝试的是实时更新列表。但更新仅适用于应用程序启动。它不会自动更新。因此,我需要在需要更新时重新启动应用程序。 有没有遗漏
我正在尝试使用接口(interface)异步检查我的 Firebase 数据库中的条目,但我不确定如何以与密码和电子邮件相同的方式实现它。 例子: if (TextUtils.isEmpty(pass
我已经追踪我的代码找到崩溃的根本原因,显然这个构造函数无法更新类的变量。当我试图从此类获取数据时出现空指针异常。您可以安全地假设记录已经在数据库中,它所要做的只是获取数据并将其放入类/对象中。我现在只
我试图返回一个 bool 值,但返回的值始终为 false,即在本例中为 0。 检查变量是一个实例变量,按下按钮时将调用以下函数。 private boolean checkAnswerSubmiss
我是一名优秀的程序员,十分优秀!