如何知道 firebase ChildEventListener 是否找到 child ? [android]
how to know if firebase ChildEventListener found child ? [android]
所以我试图通过他们的电子邮件获取用户密钥,问题是我不知道我的代码内部是否查询确实找到了某些东西..所以我假设我是否在child补充说查询成功并且找到了 child 所以我将把密钥传递给另一个 activity 并停止当前 activity 但是当我 运行 app 整个代码都被执行了。我觉得我的方式有点不对,但我没有找到任何方法来知道查询是否成功或找到 child ....如果你有任何想法请帮助...
public void searchemail(String email){
Firebase ref = new Firebase("https://<myfirebase>.firebaseio.com/users");
Query queryRef = ref.orderByChild("Email").equalTo(email);
ChildEventListener listener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
userkey = dataSnapshot.getKey();
homeintent.putExtra("key", userkey);
startActivity(homeintent);
finish();
return;
// I want code to stop here
}}
queryRef.addChildEventListener(listener);
Toast toast = Toast.makeText(this, "email not found", Toast.LENGTH_SHORT); // Im assuming if Im here then no child is found but this always get executed before startactivity
}
输出:
如果找到电子邮件 -> toast 将显示然后主页 activity 将开始...
如果找不到电子邮件 -> 只会显示 toast..
ChildEventListener
的方法在 相关事件发生时 被调用。所以 onChildAdded()
将被调用 当 添加了 child 时。出于这个原因,如果 存在 child,则您不能轻易使用 ChildEventListener
来检测 。
检测 child 是否存在的最简单方法是使用 ValueEventListener
:
public void searchemail(String email){
Firebase ref = new Firebase("https://<myfirebase>.firebaseio.com/users");
Query queryRef = ref.orderByChild("Email").equalTo(email);
ValueEventListener listener = new ValueEventListener() {
@Override
public void onDataChanged(DataSnapshot snapshot) {
if (snapshot.exists()) {
for (DataSnapshot child: snapshot.getChildren()) {
homeintent.putExtra("key", child.getKey());
startActivity(homeintent);
break; // exit for loop, we only want one match
}
}
else {
Toast toast = Toast.makeText(this, "email not found", Toast.LENGTH_SHORT);
}
}
};
queryRef.addValueEventListener(listener);
}
所以我试图通过他们的电子邮件获取用户密钥,问题是我不知道我的代码内部是否查询确实找到了某些东西..所以我假设我是否在child补充说查询成功并且找到了 child 所以我将把密钥传递给另一个 activity 并停止当前 activity 但是当我 运行 app 整个代码都被执行了。我觉得我的方式有点不对,但我没有找到任何方法来知道查询是否成功或找到 child ....如果你有任何想法请帮助...
public void searchemail(String email){
Firebase ref = new Firebase("https://<myfirebase>.firebaseio.com/users");
Query queryRef = ref.orderByChild("Email").equalTo(email);
ChildEventListener listener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
userkey = dataSnapshot.getKey();
homeintent.putExtra("key", userkey);
startActivity(homeintent);
finish();
return;
// I want code to stop here
}}
queryRef.addChildEventListener(listener);
Toast toast = Toast.makeText(this, "email not found", Toast.LENGTH_SHORT); // Im assuming if Im here then no child is found but this always get executed before startactivity
}
输出: 如果找到电子邮件 -> toast 将显示然后主页 activity 将开始... 如果找不到电子邮件 -> 只会显示 toast..
ChildEventListener
的方法在 相关事件发生时 被调用。所以 onChildAdded()
将被调用 当 添加了 child 时。出于这个原因,如果 存在 child,则您不能轻易使用 ChildEventListener
来检测 。
检测 child 是否存在的最简单方法是使用 ValueEventListener
:
public void searchemail(String email){
Firebase ref = new Firebase("https://<myfirebase>.firebaseio.com/users");
Query queryRef = ref.orderByChild("Email").equalTo(email);
ValueEventListener listener = new ValueEventListener() {
@Override
public void onDataChanged(DataSnapshot snapshot) {
if (snapshot.exists()) {
for (DataSnapshot child: snapshot.getChildren()) {
homeintent.putExtra("key", child.getKey());
startActivity(homeintent);
break; // exit for loop, we only want one match
}
}
else {
Toast toast = Toast.makeText(this, "email not found", Toast.LENGTH_SHORT);
}
}
};
queryRef.addValueEventListener(listener);
}