2017-07-24 9 views
0

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; 
} 
+0

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. –

+0

@MattClark Wie kann ich das erreichen? Kannst du helfen ? Ich bin ziemlich neu in Java – Jacky

Antwort

0

Ihre private boolean checkCoverageGuest() Methode zurückgibt, bevor public void onSuccess() ausgeführt wird, ist dies der Grund für checkCoverageGuest() immer false zurück.

Wenn Sie brauchen etwas auszuführen, nachdem Sie die hasCoverageGuest guter Wert erhalten dann excute innerhalb onSucess()

1

Sie müssen einen Rückruf haben, um Erfolg oder Misserfolg anzugeben. Eine Möglichkeit, dies zu tun, ist die Verwendung der Schnittstelle.

public interface notifyGuestCoverage { 
     void hasCoverage(int status); 
} 

in onSuccess,

if (!restaurants.getString(0).equals("null")) { 
    notifyGuestCoverageObj.hasCoverage(true); 
} 

Diese Schnittstelle wird von der Klasse implementiert werden, die Abdeckung hat einen Wert von erfordert. für ex,

class Example implements notifyGuestCoverage{ 
    void hasCoverage(int status){ 
      //your code 
    } 
} 
Verwandte Themen