У меня проблема с двумя отдельными методами, по сути та же проблема, когда ссылка на базу данных запускает и извлекает все правильные пути из соответствующих узлов, но пропускает первый запуск onDataChange, а затем запускает, как и ожидалось, впоследствии, даваяценности нужны.
Общий контекст этих двух методов - получение значения по ссылке в базе данных с использованием кода / значения (указанного пути) для получения соответствующего значения.Это значение извлекается и используется в других местах программы.
Я видел много проблем, связанных с тем, что onDataChange не запускается.Решил многие из этих проблем в других местах моей программы, но каким-то образом эти 2 метода остаются с этой проблемой.Я запускаю debug несколько раз и не понимаю, как он показывает и получает правильные пути, но пропускает первый запуск onDataChange, где другие методы, реализующие точно такой же принцип, работают на совершенствовании.
Я только публикую первую проблему
в onCreate
databaseReference_AUTH_TABLE = FirebaseDatabase.getInstance().getReference(AUTH_TABLE_TAG); verified = false;
Контекст - это использование диалога для аутентификации кода.Проверьте, существует ли код в базе данных.И если это так, запустите остальную часть программы, что мне нужно сделать
public void authenticateProductID(final String code){
databaseReference_AUTH_TABLE.child(code).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists() && !verified){//Exists and is not verified yet
PID = dataSnapshot.getValue().toString();
verified = true;
return;
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
public void showPopupProduct_btn(View view){
final Dialog dialogProductVerification = new Dialog(this);
dialogProductVerification.setContentView(R.layout.layout_popup_product);
Button authenticate = dialogProductVerification.findViewById(R.id.btnPopupProductVerification);
authenticate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText verificationCode = dialogProductVerification.findViewById(R.id.editTextPopupCode);
code = verificationCode.getText().toString();
if(noDuplicateCode(code)){
authenticateProductID(code);
if(verified){
getPackage(PID, code);
txtResult.setText(code);
}
else{
Toast.makeText(POSActivity.this, "Authentication Failed", Toast.LENGTH_SHORT).show();
}
}
}
});
dialogProductVerification.show();
}
Поскольку onDataChange не запускается в первый раз, проверено ложно.Но 2-е нажатие кнопки все идеально.
узел firbase
В основном мое приложение будет завершено, когда это будет решено.Любая помощь будет высоко ценится.Заранее спасибо