Как интерфейсы устанавливают значения переменных вне onResponse? - PullRequest
0 голосов
/ 28 мая 2020

Итак, я реализовал интерфейс обратного вызова для хранения возвращенных данных onResponse в локальной переменной в MainActivity. Учитывая, что я это реализовал, я не совсем понимаю, почему в этом случае используется интерфейс? Изначально у меня была переменная с именем isValid, которая была удалена в рабочем коде для хранения значения onResponse, 1 или 0. Но к ней нельзя было получить доступ после вызова в основном после apiValid(). Почему это так? Кто-нибудь может объяснить? Мой код ниже.

Интерфейс обратного вызова

public interface VolleyCallback{
        void onSuccess(String result);
}

Функция apiValid:

 private void apiValid(final VolleyCallback callback,final String jwt){
        rq = MySingleton.getInstance(this.getApplicationContext()).getRequestQueue();
        StringRequest sr = new StringRequest(Request.Method.POST, API_URL, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                String result = response;
                callback.onSuccess(result);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String,String> params = new HashMap<>();
                String option="verify";
                params.put("option",option);
                params.put("jwt",jwt);
                return params;
            }
        };
        MySingleton.getInstance(this).addToRequestQueue(sr);
    }

Вызов функции для выполнения залпа в MainActivity:

apiValid(new VolleyCallback() {
                @Override
                public void onSuccess(String result) {
                    if(result.equals("1")){
                        Intent intent = new Intent(getApplicationContext(),MainActivity.class);
                        intent.putExtra("Member",test_member);
                        startActivity(intent);
                    }else{
                        Log.d("console","Invalid key");
                    }
                }
            })

Любое объяснение приветствуется. Спасибо за внимание.

...