我熟悉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>
如何处理这种方法?
答案 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();
}
当你回来时,你无法获得response
!Volley
request
是异步的!
我使用EventBus
,我这样做:
当我需要从网上获取数据时,我会添加这样的请求。
然后,当我从网上得到回复时,我使用EventBus发布活动。
我收到了活动并更新了我的页面。
或者你可以试试RxAndroid。