【发布时间】:2015-04-15 09:14:41
【问题描述】:
我想向 API 发送请求并在 Android 中获得 JSON 格式的响应。我使用 Volley 来帮助我。我打算将 JsonObjectRequest 包装在 VolleyHelper 中,以使我更容易使用它。问题是 JsonObjectRequest 的 onResponse() 是无效的,因此我无法返回 JSON 对象。我的想法是让我的 api 调用像这样简单。
JSONObject response = VolleyHelper.getInstance(this).get(url);
JSONObject response = VolleyHelper.getInstance(this).post(url, params);
下面是我的帮助代码,使用 Google 建议的单例模式。
VolleyHelper
public class VolleyHelper {
private static VolleyHelper mInstance;
private RequestQueue mRequestQueue;
private static Context mCtx;
public static synchronized VolleyHelper getInstance(Context context) {
if (mInstance == null) {
mInstance = new VolleyHelper(context);
}
return mInstance;
}
private VolleyHelper(Context context) {
mCtx = context;
mRequestQueue = getRequestQueue();
}
private RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
}
return mRequestQueue;
}
private <T> void addToRequestQueue(Request<T> req) {
getRequestQueue().add(req);
}
public JSONObject get(String url) {
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
//return jsonObject;
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
//return jsonerror
}
});
addToRequestQueue(request);
}
public JSONObject post(String url, Map<String, String> params) {
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
//return jsonObject;
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
//return jsonerror
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
return params;
}
};
addToRequestQueue(request);
}
}
【问题讨论】: