gpt4 book ai didi

java - 在预期之前执行的代码块,代替 boolean 值

转载 作者:行者123 更新时间:2023-12-02 01:38:08 24 4
gpt4 key购买 nike

我正在设置借记卡屏幕,您可以在其中将借记卡/信用卡添加到您的帐户。我已经把它设置得很好,但我的问题是检查卡输入是否重复。

代码正在运行,但将卡添加到帐户的部分发生在卡被标记为重复之前,我不确定为什么会发生这种情况。

下面是调用我的 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()) 代码发生在标记重复项之前。

为什么会发生这种情况?

最佳答案

问题似乎在于您正在回调 onDataChange 中检查重复项

需要一段时间才能接到电话。与此同时,你的if(!isDuplicate) 被调用并执行,因为 onDataChange 尚未将 isDuplicate 更改为 false

This javascript 示例也有类似的问题,建议是在回调方法本身内执行依赖于回调的所有逻辑。在这种情况下,您需要重新编写代码,将 if(!isDuplicate) 内的所有必要代码放入 checkDuplicate()< 中找到的 onDataChange() 中。/

关于java - 在预期之前执行的代码块,代替 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54891267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com