我觉得这是一个非常基本的概念误解。在我的Android应用程序中,我使用Volley lib发出HTTP请求。起初我通过活动代码中的JsonObjectRequest发出请求并且工作正常,但现在我将一个类中的请求代码分开,所以我可以从任何Activity调用它。新类有一个返回请求的JSONObject的方法,但我对返回的对象执行的任何“json操作”都以错误结束。
这是新的类代码,JSONRequests:
public class JSONRequests {
private JSONObject mResponse;
private String mURL = "https://myurl.com/";
public JSONObject getJSONObject(final String credentials, final String path) {
final JsonObjectRequest mRequest = new JsonObjectRequest(mURL.concat(path), null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
mResponse = response;
try {
Log.d("RESPONSE", mResponse.getString("id")); // It works here
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}
) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Authorization", "Basic " + credentials);
return headers;
}
};
MyApplication.getInstance().getRequestQueue().add(mRequest);
return mResponse;
}
}
以下是我从MyActivity调用getJSONObject的方法:
JSONRequests mRequest = new JSONRequests();
JSONObject mInfo = mRequest.getJSONObject(mEncodedCredentials, mPath);
try {
Log.d("RESPONSE", mInfo.getString("id")); // This doesn't work
} catch (JSONException e) {
e.printStackTrace();
}
当在Activity文件中时,我使用“response”作为JSONObject并且它工作,但现在分开它不会。我不知道JSONObject是错误还是我没有以正确的方式获取返回的对象。提前谢谢。