【发布时间】:2015-11-04 12:41:57
【问题描述】:
我熟悉 Volley 并创建一个 Singleton 类,并将请求添加到队列中。但是,我希望增加 volley 的模块化,并通过方法调用将所有请求简单地调用到另一个类。我已将当前操作设置为常见 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;
}
但是,我在分配响应时遇到了令人困惑的 catch 22 错误:
getRequestReturn = response;
错误指出必须将 getRequestReturn 声明为 final 以允许在内部类中使用,但在分配 final 时,会出现另一个错误,指出您无法为 final 变量赋值。
如何处理这种方法?
【问题讨论】:
-
声明getRequestReturn到类级
-
不要这样用return,你什么都得不到,请看我在下面问题stackoverflow.com/questions/32627089/…的回答
-
@BNK 怎么样:stackoverflow.com/questions/19837820/…,看起来很简洁,调用也很干净,很简单:
RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); CustomRequest jsObjRequest = new CustomRequest(Method.POST, url, params, this.createRequestSuccessListener(), this.createRequestErrorListener()); requestQueue.add(jsObjRequest); -
@Sauron:没关系,当然,但是,我的意思是如果你将这些行移到一个方法/函数中,然后在该方法的末尾返回,你将什么也得不到(null)与该返回值。我会给你另一个链接供你参考:)
标签: android android-volley final