I'm saving Data into Firebase Database to verify few condition I read data from database using dataSnapshot
inside Button's click listener that I have used addListenerForSingleValueEvent
. So when I run my application and try to cick that button addListenerForSingleValueEvent
block skip whole query. What is wrong I am not getting with code as not showing any error or crashing application. Below is my code:
btnCreate_Account.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String mobileverify = phonenumber.getText().toString();
dbuser = FirebaseDatabase.getInstance().getReference("Passanger");
dbuser.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot datas : dataSnapshot.getChildren()) {
String dbmobileno = datas.child("mobileno").getValue().toString();
if (TextUtils.isEmpty(mobileverify)) {
Toast.makeText(RegistrationActivity.this, "Please Enter Mobile No",
Toast.LENGTH_LONG).show();
return;
} else {
if (mobileverify.equals(dbmobileno)) {
//Check if Same Mobile Number Registered or Not
phonenumber.getText().clear();
Toast.makeText(RegistrationActivity.this, "Mobile No Already Registered!!!", Toast.LENGTH_LONG).show();
break;
} else if (!mobileverify.equals(mobileverify)){
//do something
btnCreate_Account.setEnabled(false);
AddUserRegistration();
Toast.makeText(RegistrationActivity.this, "Please Enter New Mobile Number !!", Toast.LENGTH_LONG).show();
break;
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
2.FireBaseDataBase Structure Below Image Show Database Structure https://i.stack.imgur.com/mAt4L.png
答案 0 :(得分:2)
从Firebase异步加载数据。在加载数据的同时,主线程继续运行主代码。然后,在加载数据后,将调用您的onDataChanged
方法。
在这种情况下,这意味着您无法使用调试器进入onDataChange
。
让我们快速了解一下调试器中的含义。我已经编号了最重要的几行:
/* 1 */ dbuser = FirebaseDatabase.getInstance().getReference("Passanger");
/* 2 */ dbuser.addListenerForSingleValueEvent(new ValueEventListener() {
/* 3 */ @Override
/* 4 */ public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
/* 5 */ for (DataSnapshot datas : dataSnapshot.getChildren()) {
/* 6 */ String dbmobileno = datas.child("mobileno").getValue().toString();
...
/* 7 */ public void onCancelled(@NonNull DatabaseError databaseError) {
/* 8 */ }
/* 9 */ });
/*10 */ System.out.println("Got here");
我正在调试器中,该调试器在行1
处暂停,您告诉它转到下一条语句,它将到达行2
。到目前为止,一切都很好,这可能正是我们所有人所期望的。
如果您然后从2
行告诉调试器转到下一条语句,它将跳到10
行。原因是第2行开始异步操作,这将需要一些时间才能完成。因此,调试器在异步帮助程序类之后的语句 之后继续,它位于10
行。
如果要查看是否调用onDataChange
,则需要在该方法的第一行中设置一个断点,因此在这种情况下,请在行5
上设置一个断点。一旦调试器达到该断点,您就可以使用通常的“ next statement”指令继续逐步执行该方法。