//代码
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”是从内部类内部访问的,需要声明为final。 我做了一些研究并使用Volley阅读了一些有关POST请求的教程,其中很大一部分没有使用变量,而是在该函数中使用了字符串。将变量设置为final的问题是用户正在输入变量,因此该变量只会提交查询后有一个值。
答案 0 :(得分:0)
这是因为您在方法内部的代码块中使用了参数变量。
JAVA编译器要求将Response.Listener
块范围内的 outside 变量声明为final,以确保在以下情况下变量值保持相同(声明该块时)运行代码。
它确保您在声明块后不能修改变量的值。
因此,您需要将final
放在函数参数中的String strQuery
之前,因为您正在块中使用它。