Nach der Auswahl des Bereichs durch den Benutzer gibt es eine Funktion namens checkCoverageGuest()
. Diese Funktion prüft, ob der ausgewählte Bereich vom Benutzer für dieses Restaurant abgedeckt ist oder nicht. Wenn das Restaurant abgedeckt ist, gibt checkCoverageGuest()
den wahren Wert zurück. Wenn es für dieses Restaurant keine Abdeckung gibt, gibt checkCoverageGuest()
false zurück.Immer false als boolescher Wert
Wenn der Wert wahr ist, wird mit der nächsten Ebene fortgefahren. Wenn der Wert false ist, zeigt der Bildschirm eine Toast-Fehlermeldung an, dass das ausgewählte Restaurant nicht abgedeckt ist.
Gerade jetzt, jeder dieser aus dieser Funktion checkCoverageGuest()
als falsch herauskommen.
Hier ist mein Code.
private boolean checkCoverageGuest() {
try {
String url;
if (appPrefs.getLanguage().equalsIgnoreCase("ar"))
url = LinksConstants.TEST_SERVER_URL
+ LinksConstants.SEARCH_COVERAGE_AREA;
else
url = LinksConstants.TEST_SERVER_URL
+ LinksConstants.SEARCH_COVERAGE_AREA;
Intent startingIntent = getIntent();
city_id = getIntent().getStringExtra("id");
RequestParams params = new RequestParams();
params.put("area", city_id);
NetworkRestClient.post(url, params, new JsonHttpResponseHandler() {
@Override
public void onStart() {
super.onStart();
progressActivity.showLoading();
}
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
super.onSuccess(statusCode, headers, response);
progressActivity.showContent();
JSONObject[] restaurants_arr = null;
hasCoverageGuest = true;
try {
if (response != null) {
JSONArray restaurants = response.getJSONArray("restaurants");
// if restaurants deliver to that area
if (!restaurants.getString(0).equals("null")) {
restaurants_arr = new JSONObject[restaurants.length()];
int has_coverage = 1; // assume coverage is there..
for (int j = 0; j < Utils.cart_restaurants.size(); j++) {
RestaurantModel restaurant = Utils.cart_restaurants.get(j);
String restaurantCartID = restaurant.getId();
boolean found = false;
for (int i = 0; i < restaurants.length(); i++) {
restaurants_arr[i] = restaurants.getJSONObject(i);
String restaurantID = restaurants_arr[i].get("restaurant_id").toString();
if (restaurantCartID.equals(restaurantID)) {
found = true;
break;
}
} //end of inner for
if (found == false) {
Toast.makeText(CheckoutActivity.this, "There is no coverage for the Selected Area ", Toast.LENGTH_SHORT).show();
hasCoverageGuest = false;
break;
}
}
//end of outer for
} //end of if
else //if restaurants don't deliver to that area
{
hasCoverageGuest = false;
}
} // end of if response != null
} // end of try
catch (Exception ex) {
GSLogger.e(ex);
showError();
}
}
@Override
public void onFailure(int statusCode, Header[] headers, String errorResponse, Throwable throwable) {
super.onFailure(statusCode, headers, errorResponse, throwable);
showError();
if (AppConstants.DEBUG_MODE)
showToast(errorResponse);
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
super.onFailure(statusCode, headers, throwable, errorResponse);
showError();
}
});
} catch (Exception ex) {
GSLogger.e(ex);
showError();
}
return hasCoverageGuest;
}
Ihre Methode den Standardwert der Variablen zurückgeben, da der Wert erst später geändert werden, wenn die asynchrone Methode abgeschlossen . Sie müssen Ihre Logik vom Rückruf aus aufrufen oder warten, bis die asynchrone Methode abgeschlossen ist, indem Sie eine andere Variable verwenden. –
@MattClark Wie kann ich das erreichen? Kannst du helfen ? Ich bin ziemlich neu in Java – Jacky