我已实施功能,以获得餐厅区域的最低订单。在check_minimum_order()函数中,我得到了响应所需的结果。值为rest_area_min_order = 10.现在,我想将通过JSON接收的值传递给下一个函数,以便我可以进行计算部分。
以下是 check_minimum_order()
的代码 private void check_minimum_order(String restaurant_id)
{
try
{
String url;
if(appPrefs.getLanguage().equalsIgnoreCase("ar"))
url = LinksConstants.BASE_URL
+ LinksConstants.CHECK_MINIMUM_ORDER;
else
url = LinksConstants.BASE_URL
+ LinksConstants.CHECK_MINIMUM_ORDER;
RequestParams params = new RequestParams();
params.put("restaurant_id", restaurant_id);
params.put("area_id", 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);
try
{
if (response != null)
{
rest_area_min_order = response.getString("restaurant_area_min_order");
}
}
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();
}
}
现在,上面的check_minimum_order()函数给了我rest_area_min_order的值为10.现在,我想在另一个函数中使用这个rest_area_min_order。这是代码:`
check_minimum_order(restaurant_id);
HashMap<String, Object> items_hash = (HashMap<String, Object>) rest_cart_hash.get(restaurant.getId());
items_hash.put("delivery_pickup_time", time);
items_hash.put("pickup_address_id", pickup_id);
items_hash.put("payment_method_id", payment_id);
items_hash.put("delivery_pickup", delivery_pickup);
items_hash.put("selected_user_address_id", user_address_id);
items_hash.put("rest_area_min_order", rest_area_min_order);
restaurantList.add(items_hash);
String rest_min_order = (String) items_hash.get("rest_min_order");
String rest_subtotal = (String) items_hash.get("rest_subtotal");
String rest_area_min_order = (String) items_hash.get("rest_area_min_order");
boolean isError = isValidMinOrderAmount(rest_min_order, rest_subtotal, rest_area_min_order);`
答案 0 :(得分:0)
基本上,您的onSuccess
函数返回void
,因此您无法返回任何内容。您只需在onSuccess
中调用另一个函数(例如setMinimumOrder(int pMinimumOrder)
),该函数将rest_area_min_order
作为输入,您可以根据自己的要求执行其余操作。
答案 1 :(得分:0)
据我所知,实现这一目标有两种选择。
1)获取 rest_area_min_order 的值后,直接在 onSuccess 中放置要执行的代码。或者你可以为它创建一个单独的方法。
2)使用Interface传递值。
我更喜欢第一个非常简单的选项。
答案 2 :(得分:0)
根据您的问题,我了解您必须在获得Web服务响应后进行一些计算。如果剩余的计算需要在同一个类中完成,那么在获得响应后调用该方法
if (response != null)
{
rest_area_min_order = response.getString("restaurant_area_min_order");
doPostCalculations(rest_area_min_order);
}
如果check_minimum_order()方法在Network类中,并且您从另一个类(例如:activity)调用此方法,那么您可以使用接口在获取响应时与活动(或调用该方法的类)进行通信。
以下是您可以使用的示例界面。
public interface ApiListener {
void onSuccess(JSONObject response);
void onFailure();
}
请查看此帖子以了解有关界面的更多信息 - How to create our own Listener interface in android?
答案 3 :(得分:0)
主要原因是,在check_minimum_order方法中,如果您想对从网络返回的结果进行一些工作,则将网络发布到另一个线程,然后在真正获取结果后必须成功调用它。