package com.socks.jiandan.net; 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.google.gson.reflect.TypeToken; import com.socks.jiandan.callback.LoadFinishCallBack; import com.socks.jiandan.model.Comment4FreshNews; import com.socks.jiandan.utils.logger.Logger; import org.json.JSONObject; import java.util.ArrayList; import java.util.Collections; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 新鲜事评论 * Created by zhaokaiqiang on 15/4/8. */ @Deprecated public class Request4FreshNewsCommentList extends Request<ArrayList<Comment4FreshNews>> { private Response.Listener<ArrayList<Comment4FreshNews>> mListener; private LoadFinishCallBack mCallBack; public Request4FreshNewsCommentList(String url, Response.Listener<ArrayList<Comment4FreshNews>> listener, Response.ErrorListener errorListener, LoadFinishCallBack callBack) { super(Method.GET, url, errorListener); mListener = listener; mCallBack = callBack; } @Override protected Response<ArrayList<Comment4FreshNews>> parseNetworkResponse(NetworkResponse response) { try { String resultStr = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); JSONObject resultObj = new JSONObject(resultStr); String status = resultObj.optString("status"); if (status.equals("ok")) { String commentsStr = resultObj.optJSONObject("post").optJSONArray("comments") .toString(); int id = resultObj.optJSONObject("post").optInt("id"); mCallBack.loadFinish(Integer.toString(id)); ArrayList<Comment4FreshNews> comment4FreshNewses = (ArrayList<Comment4FreshNews>) JSONParser.toObject(commentsStr, new TypeToken<ArrayList<Comment4FreshNews>>() { }.getType()); Pattern pattern = Pattern.compile("\\d{7}"); for (Comment4FreshNews comment4FreshNews : comment4FreshNewses) { Matcher matcher = pattern.matcher(comment4FreshNews.getContent()); boolean isHas7Num = matcher.find(); boolean isHasCommentStr = comment4FreshNews.getContent().contains("#comment-"); //有回复 if (isHas7Num && isHasCommentStr || comment4FreshNews.getParentId() != 0) { ArrayList<Comment4FreshNews> tempComments = new ArrayList<>(); int parentId = getParentId(comment4FreshNews.getContent()); comment4FreshNews.setParentId(parentId); getParenFreshNews(tempComments, comment4FreshNewses, parentId); Collections.reverse(tempComments); comment4FreshNews.setParentComments(tempComments); comment4FreshNews.setFloorNum(tempComments.size() + 1); comment4FreshNews.setContent(getContentWithParent(comment4FreshNews.getContent())); } else { comment4FreshNews.setContent(getContentOnlySelf(comment4FreshNews.getContent())); } } Logger.d("" + comment4FreshNewses); return Response.success(comment4FreshNewses, HttpHeaderParser .parseCacheHeaders(response)); } else { return Response.error(new ParseError(new Exception("request failed"))); } } catch (Exception e) { e.printStackTrace(); return Response.error(new ParseError(e)); } } private void getParenFreshNews(ArrayList<Comment4FreshNews> tempComments, ArrayList<Comment4FreshNews> comment4FreshNewses, int parentId) { for (Comment4FreshNews comment4FreshNews : comment4FreshNewses) { if (comment4FreshNews.getId() != parentId) continue; //找到了父评论 tempComments.add(comment4FreshNews); //父评论又有父评论 if (comment4FreshNews.getParentId() != 0 && comment4FreshNews.getParentComments() != null) { comment4FreshNews.setContent(getContentWithParent(comment4FreshNews.getContent())); tempComments.addAll(comment4FreshNews.getParentComments()); return; } //父评论没有父评论了 comment4FreshNews.setContent(getContentOnlySelf(comment4FreshNews.getContent())); } } private int getParentId(String content) { try { int index = content.indexOf("comment-") + 8; int parentId = Integer.parseInt(content.substring(index, index + 7)); return parentId; } catch (Exception ex) { return 0; } } private String getContentWithParent(String content) { if (content.contains("</a>:")) return getContentOnlySelf(content).split("</a>:")[1]; return content; } private String getContentOnlySelf(String content) { content = content.replace("</p>", ""); content = content.replace("<p>", ""); content = content.replace("<br />", ""); return content; } @Override protected void deliverResponse(ArrayList<Comment4FreshNews> response) { mListener.onResponse(response); } }