Ошибка параметров запроса POST для Android Volley при использовании проанализированной переменной

//Код

private void searchQuery(String strQuery, String link){
        Toast.makeText(getContext(), "You searched for "+strQuery, Toast.LENGTH_SHORT).show();

        JsonArrayRequest request = new JsonArrayRequest(Request.Method.POST, link, new Response.Listener<JSONArray>(){
            @Override
            public void onResponse(JSONArray jresponse) {
                //displayResultInList(jresponse);
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                }
            }) {
            @Override
            protected Map<String, String> getParams() throws com.android.volley.AuthFailureError {
                Map<String, String> parameters = new HashMap<String, String>();
                parameters.put("query", strQuery);
                return parameters;
            }
        };

        RequestQueue rQueue = Volley.newRequestQueue(getActivity());
        rQueue.add(request);

    }

Эта конкретная строка: parameters.put ("query", strQuery); выдает ошибку, и в сообщении об ошибке говорится: Переменная strQuery доступна из внутреннего класса, ее необходимо объявить окончательной. Я провел некоторое исследование и прочитал несколько руководств по запросам POST с использованием Volley, и большая их часть не использует переменные, а строки в этой функции. Проблема с установкой переменной как final заключается в том, что пользователь вводит ее, поэтому эта переменная будет только имеют значение после отправки запроса.

0
0
34
1

Ответы 1

Это потому, что вы используете переменную параметра в блоке кода внутри метода.

Компилятор JAVA требует, чтобы переменные из за пределами области действия блока Response.Listener были объявлены как окончательные, чтобы гарантировать, что значение переменной останется неизменным (когда блок объявлен) при запуске кода.

Это гарантирует, что вы не можете изменить значение переменной после объявления блока.

Итак, вам НЕОБХОДИМО поместить final перед String strQuery в параметре функции, поскольку вы используете его внутри блока.

Спасибо, позволь мне попробовать

Kudzai Mutsvairo 07.09.2018 09:08

Другие вопросы по теме