//Код
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 заключается в том, что пользователь вводит ее, поэтому эта переменная будет только имеют значение после отправки запроса.
Это потому, что вы используете переменную параметра в блоке кода внутри метода.
Компилятор JAVA требует, чтобы переменные из за пределами области действия блока Response.Listener
были объявлены как окончательные, чтобы гарантировать, что значение переменной останется неизменным (когда блок объявлен) при запуске кода.
Это гарантирует, что вы не можете изменить значение переменной после объявления блока.
Итак, вам НЕОБХОДИМО поместить final
перед String strQuery
в параметре функции, поскольку вы используете его внутри блока.
Спасибо, позволь мне попробовать