嗨,我的 Android 应用程序中有一个 boolean 返回类型方法。在我的方法中,我如何调用 api,但我的方法立即返回第一个 boolean 值,而无需等待代码的 api 回调部分。我该如何解决这个问题?请看一下下面的代码:
public boolean validateForm() {
flag=true;
//---- THIS CODE DOES NOT EXECUTE.. THE RETURN STATEMENT IS DIRECTLY EXECUTED---
checkSourceCode(new BooleanCallBack() {
@Override
public void onSuccess(boolean result) {
validateCode = result;
if (!validateSourceCode(result)) {
flag = false;
}
if (flag) {
saveData();
}
}
});
//---- THE ABOVE CODE DOES NOT EXECUTE.. THE RETURN STATEMENT BELOW IS DIRECTLY EXECUTED
return flag; //This part is directly RETURNED without waiting for the above part of the code to execute
}
如果我遵循 Juan Felippo 给出的答案,那么我还有另一个问题需要处理:
这是我调用 validateForm() 方法的地方:
public boolean validate(int position) {
switch (position) {
case 0:
if (signUp_bgp_1.validateForm()) {
signUp_bgp_2.updateFields();
return true;
} else {
return false;
}
case 1:
signUp_bgp_2.validateForm(new BooleanCallBack() {
@Override
public void onSuccess(boolean result) {
return result; // I GET ERROR HERE "CANNOT RETURN A VALUE FROM A VOID RETURN TYPE"
}
});
case 2:
return signUp_bgp_3.validateForm();
这是我的完整代码:
*我在案例 1 上调用 validateForm 方法
public boolean validate(int position) {
switch (position) {
case 0:
if (signUp_bgp_1.validateForm()) {
signUp_bgp_2.updateFields();
return true;
} else {
return false;
}
case 1:
signUp_bgp_2.validateForm(new BooleanCallBack() {
@Override
public void onSuccess(boolean result) {
bool =result; //CANNOT RETURN BOOLEAN HERE HOW TO HANDLE THIS?
}
});
case 2:
return signUp_bgp_3.validateForm();
case 3:
if (signUp_bgp_4.validateForm()) {
signUp_bgp_5.updateDetails();
return true;
} else {
return false;
}
case 4:
if (signUp_bgp_5.validateForm()) {
// signUp_bgp_5.updateDetails();
return true;
} else {
return false;
}
default:
return signUp_bgp_1.validateForm();
}
}
*我根据 Juan Fellipo 的回答修改了 validateForm 方法
public void validateForm(final BooleanCallBack mainCallback) {
flag=true;
checkSourceCode(new BooleanCallBack() {
@Override
public void onSuccess(boolean result) {
validateCode = result;
if (!validateSourceCode(result)) {
flag = false;
}
if (!accept_checkbox.isChecked()) {
Toast.makeText(getActivity().getBaseContext(), "Accept The Terms & Conditions To Proceed", Toast.LENGTH_LONG).show();
// accept_checkbox.requestFocus();
flag = false;
}
if (!validateAddress()) {
flag = false;
}
if (!validateCountry()) {
flag = false;
}
if (!validatelandmark()) {
flag = false;
}
if (!validateDistrict()) {
flag = false;
}
// if (!validateCity()) {
// flag = false;
// }
// if (!validateMobilenumber()) {
// flag = false;
// }
if (!validatePincode()) {
flag = false;
}
if (!validateFullfillment()) {
flag = false;
}
if (flag) {
saveData();
}
mainCallback.onSuccess(flag);
}
});
}
最佳答案
api 方法是异步的,而您的方法是同步的。您可以在响应准备好时提供回调。 尝试:
public void validateForm(final BooleanCallBack mainCallback) {
flag=true;
checkSourceCode(new BooleanCallBack() {
@Override
public void onSuccess(boolean result) {
validateCode = result;
if (!validateSourceCode(result)) {
flag = false;
}
if (flag) {
saveData();
}
mainCallback.onSuccess(flag)
}
});
}
并调用方法:
someObject.validateForm(new BooleanCallBack() {
@Override
public void onSuccess(boolean result) {
//DO STH WITH RESULT
}
});
有关同步/异步和回调的更多信息,请参阅: What is a callback in java
关于java - 安卓/java : stop a method from returning value until a part of the method is executed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40360519/