如何从使用json响应的函数返回值?

时间:2017-08-07 09:56:07

标签: java android json

我已实施功能,以获得餐厅区域的最低订单。在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);`

4 个答案:

答案 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方法中,如果您想对从网络返回的结果进行一些工作,则将网络发布到另一个线程,然后在真正获取结果后必须成功调用它。