我试图以JSON对象的形式从服务器下载数据,解析该对象然后使用我的应用程序中的其他数据。
我创建了一个下载数据的类(使用Log.v语句确认)
问题是我想在RecyclerView中显示结果,并且在解析JSON响应之后生成的对象列表直到从我的主类调用适配器方法之后才生成。
所以我的问题是,鉴于下面的代码,我如何确保on response响应方法仅在parseResponse方法完成后退出。目前我从requestAndPareseReleaseList方法返回(Null)_releaseList。
public class ParseReleaseJSON extends JSONObject {
String _url;
List<ReleaseInfo> _releaseList = Collections.emptyList();
ParseReleaseJSON(String url) {
super();
_url = url;
}
public List<ReleaseInfo> requestAndParseReleaseList(Context _context){
JsonObjectRequest jsObReq = new JsonObjectRequest(Request.Method.GET, _url, (String) null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
_releaseList = parseResponse(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.v("err", "nosuccess");
}
});
MySingleton.getInstance(_context).addToRequestQueue(jsObReq);
return _releaseList;
}
private List parseResponse(JSONObject response) {
List<ReleaseInfo> list = new ArrayList<>();
if(response == null || response.length() == 0){
return list;
}
try {
if(response.has("results")){
JSONArray resultsArray = response.getJSONArray("results");
for(int i = 0, j = 6; i < j; i++){
ReleaseInfo release = new ReleaseInfo();
JSONObject tempObj = resultsArray.getJSONObject(i);
release.title = tempObj.getString("title");
release.date = tempObj.getString("date");
list.add(release);
}
return list;
}
} catch (JSONException e) {
e.printStackTrace();
}
return list;
}
}