Я настраиваю экран дебетовой карты, на котором вы можете добавить свою дебетовую / кредитную карту к своей учетной записи.У меня все настроено хорошо, но моя проблема связана с проверкой, является ли ввод карты дубликатом.
Код работает, но часть, где карта добавляется в учетную запись, происходит раньшекарта помечена как дубликат, и я не уверен, почему это происходит.
Вот код, который вызывает мой метод checkDuplicate()
, а затем продолжает добавление карты в учетную запись, если все верно
buy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checkDuplicates(cardForm.getCardNumber());
if(!isDuplicate) {
if (cardForm.isValid()) {
alertBuilder = new AlertDialog.Builder(AddDebits.this);
alertBuilder.setTitle("Please ensure your card information is correct");
alertBuilder.setMessage("Card number: " + cardForm.getCardNumber() + "\n" +
"Card expiry date: " + cardForm.getExpirationDateEditText().getText().toString() + "\n" +
"Card CVV: " + cardForm.getCvv() + "\n" +
"Postal code: " + cardForm.getPostalCode() + "\n" +
"Name: " + cardForm.getCardholderName());
alertBuilder.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
final CreateCard newCard = new CreateCard(cardForm.getCardholderName(), cardForm.getCardNumber(),
cardForm.getExpirationDateEditText().getText().toString(), cardForm.getCvv(), cardForm.getPostalCode());
amountOfCards(new AmountOfCardsCallback() {
@Override
public void onCallback(long amount, long defaultCard) {
userRef.child("amountOfCards").setValue(++amount);
userRef.child("Card" + amount).setValue(newCard);
}
});
dialogInterface.dismiss();
Toast.makeText(AddDebits.this, "Your card has been added to your account", Toast.LENGTH_LONG).show();
}
});
alertBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
});
Фрагмент этого, который меня больше всего беспокоит, это первые несколько строк
public void onClick(View view) {
checkDuplicates(cardForm.getCardNumber());
if(!isDuplicate) {
if (cardForm.isValid()) {
Метод checkDuplicate()
показан ниже
private void checkDuplicates(final String cardNumber)
{
userRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(final DataSnapshot dataSnapshot) {
amountOfCards(new AmountOfCardsCallback() {
@Override
public void onCallback(long amount, long defaultCard) {
for(int i = 0; i < amount; i++) {
if (dataSnapshot.child("Card" + i).child("cardNumber").getValue() != null) {
if (dataSnapshot.child("Card" + i).child("cardNumber").getValue().toString().equals(cardNumber)) {
isDuplicate = true;
alertBuilder.setTitle("Duplicate Card")
.setMessage("You already have this card saved");
alertBuilder.show();
alertBuilder.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
}
}
}
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
Этот методфункционирует отличноОн находит дубликаты и отображает диалоговое окно, когда это происходит.Но проблема в том, что этого не произойдет до тех пор, пока карта не будет добавлена в учетную запись.
Таким образом, код if(cardForm.isValid())
происходит до того, как дубликат помечается.
Почему это может происходить?