package com.socks.jiandan.net; import android.text.TextUtils; import com.android.volley.NetworkResponse; import com.android.volley.ParseError; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.toolbox.HttpHeaderParser; import com.socks.jiandan.callback.LoadFinishCallBack; import com.socks.jiandan.model.Commentator; import com.socks.jiandan.utils.TextUtil; import org.json.JSONObject; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Request4CommentList extends Request<ArrayList<Commentator>> { private Response.Listener<ArrayList<Commentator>> listener; private LoadFinishCallBack callBack; public Request4CommentList(String url, Response .Listener<ArrayList<Commentator>> listener, Response.ErrorListener errorListener, LoadFinishCallBack callBack) { super(Method.GET, url, errorListener); this.listener = listener; this.callBack = callBack; } @Override protected Response<ArrayList<Commentator>> parseNetworkResponse(NetworkResponse response) { try { //获取到所有的数据 String jsonStr = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); JSONObject resultJson = new JSONObject(jsonStr); String allThreadId = resultJson.getString("response").replace("[", "").replace ("]", "").replace("\"", ""); String[] threadIds = allThreadId.split("\\,"); callBack.loadFinish(resultJson.optJSONObject("thread").optString("thread_id")); if (TextUtils.isEmpty(threadIds[0])) { return Response.success(new ArrayList<Commentator>(), HttpHeaderParser .parseCacheHeaders(response)); } else { //然后根据thread_id再去获得对应的评论和作者信息 JSONObject parentPostsJson = resultJson.getJSONObject("parentPosts"); //找出热门评论 String hotPosts = resultJson.getString("hotPosts").replace("[", "").replace ("]", "").replace("\"", ""); String[] allHotPosts = hotPosts.split("\\,"); ArrayList<Commentator> commentators = new ArrayList<>(); List<String> allHotPostsArray = Arrays.asList(allHotPosts); for (String threadId : threadIds) { Commentator commentator = new Commentator(); JSONObject threadObject = parentPostsJson.getJSONObject(threadId); //解析评论,打上TAG if (allHotPostsArray.contains(threadId)) { commentator.setTag(Commentator.TAG_HOT); } else { commentator.setTag(Commentator.TAG_NORMAL); } commentator.setPost_id(threadObject.optString("post_id")); commentator.setParent_id(threadObject.optString("parent_id")); String parentsString = threadObject.optString("parents").replace("[", "").replace ("]", "").replace("\"", ""); String[] parents = parentsString.split("\\,"); commentator.setParents(parents); //如果第一个数据为空,则只有一层 if (TextUtil.isNull(parents[0])) { commentator.setFloorNum(1); } else { commentator.setFloorNum(parents.length + 1); } commentator.setMessage(threadObject.optString("message")); commentator.setCreated_at(threadObject.optString("created_at")); JSONObject authorObject = threadObject.optJSONObject("author"); commentator.setName(authorObject.optString("name")); commentator.setAvatar_url(authorObject.optString("avatar_url")); commentator.setType(Commentator.TYPE_NORMAL); commentators.add(commentator); } return Response.success(commentators, HttpHeaderParser.parseCacheHeaders(response)); } } catch (Exception e) { e.printStackTrace(); return Response.error(new ParseError(e)); } } @Override protected void deliverResponse(ArrayList<Commentator> response) { listener.onResponse(response); } }