こんにちは、私はアンドロイドのアプリケーションでブール型の戻り値のメソッドを持っています。どのように私のメソッドで私はAPIを呼び出しているが、私のメソッドは、コードのAPIコールバックの部分を待つことなく、最初のブール値をimmidately返す..どのように私はこれを解決するのですか?次のコードを見てみてください。android/java:メソッドの一部が実行されるまで、メソッドが値を返すのを停止します。
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
}
を私はフアンFelippoによって与えられた答えに従っている場合、私は、その後に対処するための別の問題があります。
私はvalidateForm()メソッドを呼び出しています場所です。 HERE
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();
はMY COMPLETEコードです:
私はケース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();
}
}
*あなたのメソッドが同期している間、私の修正validateForm方法はフアンFellipoの答え
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);
}
});
}
は、あなたのコードがするonSuccessに入っていることを確認するために、ブレークポイントを使用しました:同期/非同期とコールバックが見る程度
さらに詳しい情報そしてif条件?それはすぐに文 – FabioR
を返すようにジャンプしている可能性がありますまさに!何らかの理由でonSuccessの部分が実行されるのを待っているわけではありません。 –
コールバックが成功していない可能性があるので、スキップしている可能性があります。あなたはonFailureメソッドを使ってみましたか?おそらくそれを使用してみて、コードがそれを通過していることを確認します。このようにして、コードロジックをチェックするだけでなく、コールバックが機能しているかどうかをチェックします。 – FabioR