Залп JsonObjectRequest ответ - PullRequest
       39

Залп JsonObjectRequest ответ

0 голосов
/ 26 сентября 2018

Я получаю данные с моего сервера через JSON, используя Volley JSONObjectRequest для достижения этой цели.Получив ответ в формате JSON, я хочу сохранить его в переменной и использовать в процессе выполнения.Ниже приведен пример кода:

private String description;
private int status;
private boolean validateIntegrationCode() {
    if (checkNetwork()) {
        String url = "sample url";

        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    status = response.getInt("status");// ** STATUS IS 1 HERE **
                    description = response.getString("description");

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });

        mQueue.add(request);
    } else {
        // No network, check from SQLite
    }
    if (status == 1) { // ** STATUS IS 0 HERE **
        return true;
    } else {
        return false;
    }
}

Когда я проверяю значение status перед возвратом true или false, значение status теперь равно 0, а description также возвращает null.

Мой ответ JSON:

{"status":1,"description":"Integration code is valid"}

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Запрос залпа является асинхронным вызовом.Он не блокирует код до получения ответа.Итак, ваша проверка на if(status==1) происходит до получения ответа на залп.Следовательно, это 0.

Что вы должны сделать:

1) Сделайте вашу функцию, возвращающую тип недействительной.

2) В onResponse введите код

if (status == 1) { // ** STATUS IS 0 HERE **
        statusBoolean = true;
    } else {
        statusBoolean = false;
}
0 голосов
/ 26 сентября 2018

Я обновил свой ответ, как показано ниже,

    private int status;
    private String description;

    private void callRequest() {

        // Initialize a new RequestQueue instance
        RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);

        // Initialize a new JsonObjectRequest instance
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
                Request.Method.GET,
                "URL",
                null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            status = response.getInt("status");// ** STATUS IS 1 HERE **
                            description = response.getString("description");

                            checkStatus();
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        error.printStackTrace();
                    }
                }
        );

        // Add JsonObjectRequest to the RequestQueue
        requestQueue.add(jsonObjectRequest);
    }

    private void checkStatus(){
        if(status == 1){
            // do what do you need to do id status == 1
        }else{
            // do what do you need to do id status == 0
        }
    }

Попробуйте и сообщите мне об обновлениях Спасибо!

0 голосов
/ 26 сентября 2018

Вы должны объявить статус как int вместо String.

private int status=0;

Вы можете попробовать этот способ

                status = response.getInt("status");
                description = response.getString("description");
                if (status == 1) { 
                 checkingStatus(status);
                } else {
                 checkingStatus(status);
                }

Тогда

public void checkingStatus(int status){
        if(status == 1){
            // do your code
        }else{
            // do your code
        }
    }
...