无法为最终的Volley变量响应赋值

时间:2015-11-04 12:41:58

标签: android android-volley final

我熟悉Volley并创建一个Singleton类,并向队列添加请求。但是,我希望增加齐射的模块性,并简单地通过方法调用将所有请求调用到另一个类。我已将当前操作设置为常见GET请求的基础:

public Object getRequest(String params) {

    final JSONObject getRequestReturn = new JSONObject();

    JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET,
            VolleySingleton.prefixURL, ((String) null),
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {

                    // Parse the JSON:
                    try {
                        getRequestReturn = response;

                        Log.v("GET Request value", response.toString());

                    } catch (JSONException e) {
                        e.printStackTrace();
                    } catch (NullPointerException e) {
                        e.printStackTrace();
                    }

                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("GET Request Error", error.toString());
                }
            });

    mRequestQueue.add(getRequest);

    return getRequestReturn;
}

但是,我在回复分配时遇到了令人困惑的问题22:

getRequestReturn = response;

错误指出getRequestReturn必须声明为final才允许在内部类中使用,但在分配final时,会出现另一个错误,指出您无法为最终变量赋值。 / p>

如何处理这种方法?

2 个答案:

答案 0 :(得分:0)

将JSONObject声明为全局并在此处初始化。

 JSONObject getRequestReturn ;


getRequestReturn = new JSONObject();

答案 1 :(得分:0)

public Object getRequest(String params) {

    JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET,
            VolleySingleton.prefixURL, ((String) null),
            new Response.Listener<JSONObject>() {
                @Override 
                public void onResponse(JSONObject response) {

                    // Parse the JSON: 
                    try { 

                        Log.v("GET Request value", response.toString());

                    } catch (JSONException e) {
                        e.printStackTrace();
                    } catch (NullPointerException e) {
                        e.printStackTrace();
                    } 

                } 
            }, 
            new Response.ErrorListener() {
                @Override 
                public void onErrorResponse(VolleyError error) {
                    Log.d("GET Request Error", error.toString());
                } 
            }); 

    mRequestQueue.add(getRequest);

    return new JSONObject();
} 

当你回来时,你无法获得responseVolley request是异步的!

我使用EventBus,我这样做:

当我需要从网上获取数据时,我会添加这样的请求。

然后,当我从网上得到回复时,我使用EventBus发布活动。

我收到了活动并更新了我的页面。

或者你可以试试RxAndroid。