Android volley POST请求参数在使用已解析变量时出错

Android volley POST请求参数在使用已解析变量时出错,android,android-volley,Android,Android Volley,//代码 private void searchQuery(字符串strQuery,字符串链接){ Toast.makeText(getContext(),“您搜索了”+strQuery,Toast.LENGTH\u SHORT.show(); JsonArrayRequest=newjsonarrayrequest(request.Method.POST,link,newresponse.Listener()){ @凌驾 公共void onResponse(JSONArray jrespons

//代码

private void searchQuery(字符串strQuery,字符串链接){
Toast.makeText(getContext(),“您搜索了”+strQuery,Toast.LENGTH\u SHORT.show();
JsonArrayRequest=newjsonarrayrequest(request.Method.POST,link,newresponse.Listener()){
@凌驾
公共void onResponse(JSONArray jresponse){
//显示结果列表(jresponse);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
}) {
@凌驾
受保护的映射getParams()抛出com.android.volley.AuthFailureError{
映射参数=新的HashMap();
参数put(“查询”,strQuery);
返回参数;
}
};
RequestQueue rQueue=Volley.newRequestQueue(getActivity());
rQueue.add(请求);
}
这一行:parameters.put(“query”,strQuery);正在发出错误,错误消息显示: 变量“strQuery”是从内部类中访问的,需要声明为final。
我做了一些研究,并阅读了一些关于使用Volley的POST请求的教程,其中大部分都没有使用变量,而是在该函数中使用字符串。将变量设置为final的问题是,用户正在键入该变量,因此该变量只有在提交查询后才会有值。

这是因为您使用的是方法内部代码块中的参数变量

JAVA编译器要求将
响应.Listener
块作用域之外的变量声明为final,以确保在运行代码时变量值保持不变(声明块时)

它确保在声明块后不能修改变量的值


因此,您确实需要将
final
放在函数参数的
String strQuery
之前,因为您正在块内使用它。

谢谢,让我试试
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);

    }