我试图通过以下方式获取JSON对象:
JSONObject jsonObject = http.makeRequest("GET", "https://api.twitter.com/1.1/search/tweets.json", null);
以下是处理所有HTTP请求的一般方法
public void makeRequest(String method, String url, Array params) { // Request a string response from the provided URL. JsonObjectRequest jsonObjReq = new JsonObjectRequest(getRequestMethod(method), url, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { processResponse(Constants.Global.SUCCESS, null, response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { try { mStatusCode = error.networkResponse.statusCode; VolleyLog.d(Constants.Global.ERROR, "Error: " + error.getMessage()); Logger.e(error.getMessage()); } catch (Exception e) { Logger.e(e.getMessage()); mStatusCode = 0; } Logger.e(mStatusCode.toString()); processResponse(Constants.Global.ERROR, mStatusCode, null); } }); // Add tag to request for bulk cancelling //jsonObjReq.setTag() queue.add(jsonObjReq); }
处理JSON结果的方法如下:
private JSONObject processResponse(String resultState, Integer httpStatusCode, JSONObject responseData) { try { // First check that result state is error or the success if (resultState.equals(Constants.Global.SUCCESS)) { Logger.i("Response is success"); Logger.i(responseData.toString()); //TODO: ADD SUCCESS OBJECT CREATION } if (resultState.equals(Constants.Global.ERROR)) { Logger.e("Response is error"); //TODO: ADD ERROR HANDLING AND ERROR OBJECT CREATION } } catch(Exception e) { e.printStackTrace(); Logger.e(e.getMessage()); } return responseData; }
我想问一下如何以异步方式取回JSONObject(第一个代码段)。
所有请求均使用Volley库处理。
非常感谢您的任何建议。
供您评论
我认为异步是由Volley自动提供的。所以我需要知道如何将JSON数据放入第一个片段中
IMO,而不是您的第一个片段,您可以尝试以下方式(当然,您可以JSONArray按JSONObject要求替换请求):
JSONArray
JSONObject
VolleyResponseListener listener = new VolleyResponseListener() { @Override public void onError(String message) { // do something... } @Override public void onResponse(Object response) { // do something... } }; makeJsonArrayRequest(context, Request.Method.POST, url, requestBody, listener);
的主体makeJsonArrayRequest可以如下:
makeJsonArrayRequest
public void makeJsonArrayRequest(Context context, int method, String url, String requestBody, final VolleyResponseListener listener) { JSONObject jsonRequest = null; try { ... if (requestBody != null) { jsonRequest = new JSONObject(requestBody); } ... } catch (JSONException e) { e.printStackTrace(); } JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(method, url, jsonRequest, new Response.Listener<JSONArray>() { @Override public void onResponse(JSONArray jsonArray) { listener.onResponse(jsonArray); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { listener.onError(error.toString()); } }); // Access the RequestQueue through singleton class. MySingleton.getInstance(context).addToRequestQueue(jsonArrayRequest); }
VolleyResponseListener 界面如下:
VolleyResponseListener
public interface VolleyResponseListener { void onError(String message); void onResponse(Object response); }