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

时间:2018-09-06 20:15:21

标签: android 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”是从内部类内部访问的,需要声明为final。 我做了一些研究并使用Volley阅读了一些有关POST请求的教程,其中很大一部分没有使用变量,而是在该函数中使用了字符串。将变量设置为final的问题是用户正在输入变量,因此该变量只会提交查询后有一个值。

1 个答案:

答案 0 :(得分:0)

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

JAVA编译器要求将Response.Listener块范围内的 outside 变量声明为final,以确保在以下情况下变量值保持相同(声明该块时)运行代码。

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

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