排球:不能引用android中的非最终局部变量

时间:2016-09-01 09:05:28

标签: java android android-volley

我有以下方法,使用Volley提交http请求:

private boolean SaveInformationToServer(Information information)
{

    RequestQueue queue = Volley.newRequestQueue(this);

    StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {                           
                       try{
                            return true;
                       }
                       catch (Exception ex){
                          return false;
                       }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                return false;
            }
        });

        queue.add(stringRequest);
    }

我要求此方法返回truefalse,但目前它会提供错误void method cannot return a value。我尝试了一个变量,然后得到了cannot refer to the non-final local variable inside an inner class

如何让此方法向其调用者返回boolean值?

1 个答案:

答案 0 :(得分:1)

onResponse的返回类型无效,而且它是匿名类的函数,因此您无法将匿名类的值返回给您的截击请求调用者。

你可以创建你的函数,可以在volley响应中调用它们并将你的代码放在执行结果而不是保留一个标志,这将使你的代码更具结构性和可读性(你也可以在onSuccess中设置标志)。 / p>

void onSuccess(String response){
// do what you want to do
}
void onError(VolleyError error){
// do what you want to do 
}   
 private void SaveInformationToServer(Information information)
        {

    RequestQueue queue = Volley.newRequestQueue(this);

    StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {                           
                        onSuccess(response);
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                 onError(error);
            }
        });

        queue.add(stringRequest);
    }