package com.suan.weclient.util.net;
import java.security.acl.LastOwnerException;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.http.Header;
import org.json.JSONArray;
import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import com.google.gson.Gson;
import com.suan.weclient.util.data.DataManager;
import com.suan.weclient.util.data.bean.AppItemBean;
import com.suan.weclient.util.data.bean.MaterialBean;
import com.suan.weclient.util.data.holder.AppItemHolder;
import com.suan.weclient.util.data.holder.ChatHolder;
import com.suan.weclient.util.data.bean.FansBean;
import com.suan.weclient.util.data.bean.FansGroupBean;
import com.suan.weclient.util.data.holder.FansHolder;
import com.suan.weclient.util.data.bean.MessageBean;
import com.suan.weclient.util.data.holder.MaterialHolder;
import com.suan.weclient.util.data.holder.MessageHolder;
import com.suan.weclient.util.data.bean.UserBean;
import com.suan.weclient.util.data.holder.resultHolder.FansResultHolder;
import com.suan.weclient.util.data.holder.resultHolder.MaterialResultHolder;
import com.suan.weclient.util.data.holder.resultHolder.MessageResultHolder;
public class DataParser {
public static final int PARSE_SUCCESS = 1;
public static final int PARSE_FAILED = 2;
public static final int PARSE_SPECIFIC_ERROR = 3;
public static final int PARSE_SPECIFIC_STUATION = 4;
private static final String login_timeout = "登录超时";
private static final String invalid_bizpay = "invalid bizpay url";
public static final int RET_LOGIN_SUCCESS = 302;
public static final String LOGIN_NEEDS_VERIFY = "/cgi-bin/readtemplate?t=user/validate_phone_tmpl";
public static final int GET_USER_PROFILE_SUCCESS = 1;
public static final int GET_USER_PROFILE_FAILED = 0;
public static final String today = "今天";
public static int parseUserProfile(String source, UserBean userBean) {
Document document = Jsoup.parse(source);
Elements numElements = document.getElementsByClass("number");
for (int i = 0; i < numElements.size(); i++) {
if (numElements.size() == 3) {
if (i == 0) {
int newMessage = Integer
.parseInt(numElements.get(i).html());
userBean.setNewMessage(newMessage + "");
}
if (i == 1) {
int newPeople = Integer.parseInt(numElements.get(i).html());
userBean.setNewPeople(newPeople + "");
}
if (i == 2) {
int totalPeople = Integer.parseInt(numElements.get(i)
.html());
userBean.setTotalPeople(totalPeople + "");
}
}
}
Elements avataElements = document.getElementsByClass("avatar");
for (int i = 0; i < avataElements.size(); i++) {
String fakeId = getProfileFakeId(avataElements.get(i).attr("src"));
if (!fakeId.equals("")) {
userBean.setFakeId(fakeId);
}
}
Elements nickNameElements = document.getElementsByClass("nickname");
for (int i = 0; i < nickNameElements.size(); i++) {
String nickNameString = nickNameElements.get(i).html();
if (nickNameString != "") {
userBean.setNickname(nickNameString);
return GET_USER_PROFILE_SUCCESS;
}
}
return GET_USER_PROFILE_FAILED;
}
public interface ParseMassDataCallBack {
public void onBack(int code, UserBean userBean);
}
public static void parseMassData(final String source,
final UserBean userBean,
final ParseMassDataCallBack parseMassDataCallBack) {
final Handler loadHandler = new Handler() {
// 子类必须重写此方法,接受数据
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
// 此处可以更新UI
switch (msg.arg1) {
case PARSE_SUCCESS:
UserBean getBean = (UserBean) msg.obj;
parseMassDataCallBack.onBack(msg.arg1, getBean);
break;
case PARSE_FAILED:
parseMassDataCallBack.onBack(msg.arg1, null);
break;
}
}
};
new Thread() {
public void run() {
boolean first = getUserType();
boolean second = getMassLeft();
Message message = new Message();
if (first && second) {
message.arg1 = PARSE_SUCCESS;
message.obj = userBean;
} else {
if (source.contains(login_timeout)) {
message.arg1 = PARSE_SPECIFIC_ERROR;
} else {
message.arg1 = PARSE_FAILED;
}
}
loadHandler.sendMessage(message);
}
private boolean getUserType() {
Document document = Jsoup.parse(source);
Elements typeElements = document
.getElementsByClass("mass_send_tips");
if (typeElements.size() > 0) {
String userType = typeElements.get(0).html();
if (userType.contains(today)) {
userBean.setUserType(UserBean.USER_TYPE_SUBSTRICTION);
} else {
userBean.setUserType(UserBean.USER_TYPE_SERVICE);
}
return true;
}
return false;
}
private boolean getMassLeft() {
String result = "";
Pattern pattern = Pattern
.compile("can_verify_apply\\s\\?\\s\\'(\\d*)\\'\\*");
Matcher matcher = pattern.matcher(source);
while (matcher.find()) {
result = matcher.group(1);
userBean.setMassLeft(Integer.parseInt(result));
return true;
}
return false;
}
}.start();
}
private static String getProfileFakeId(String source) {
String result = "";
Pattern pattern = Pattern.compile("fakeid=(\\d*)");
Matcher matcher = pattern.matcher(source);
while (matcher.find()) {
return matcher.group(1);
}
return result;
}
public interface MessageListParseCallBack {
public void onBack(MessageResultHolder messageResultHolder,
int code);
}
public static void parseNewMessage(
final MessageListParseCallBack messageListParseCallBack,
final String source, final UserBean userBean,
final int messageMode,final boolean addDataItem,
final String referer) {
final Handler loadHandler = new Handler() {
// 子类必须重写此方法,接受数据
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.arg1) {
case PARSE_SUCCESS:
MessageResultHolder messageResultHolder = (MessageResultHolder) msg.obj;
messageListParseCallBack.onBack(messageResultHolder,
msg.arg1);
break;
default:
messageListParseCallBack.onBack(null,
msg.arg1);
break;
}
}
};
new Thread() {
public void run() {
Message message = new Message();
message.arg1 = PARSE_FAILED;
Document document = Jsoup.parse(source);
Elements scriptElements = document.getElementsByTag("script");
for (Element nowElement : scriptElements) {
if (nowElement.html().contains("wx.cgiData ")) {
JSONObject contentObject = getMessageArray(nowElement.html());
if (contentObject != null) {
try {
JSONArray getArray = contentObject.getJSONArray("messageArray");
ArrayList<MessageBean> resultMessageList = getMessageItems(
getArray, userBean, referer);
String latestMsgId = contentObject.get("lastMsgId").toString();
if (resultMessageList.size() == 0) {
MessageBean emptyMessage = new MessageBean();
emptyMessage.setType(MessageBean.MESSAGE_TYPE_EMPTY);
resultMessageList.add(emptyMessage);
} else if(addDataItem){
MessageBean dataMessage = new MessageBean();
dataMessage.setType(MessageBean.MESSAGE_TYPE_DATA);
resultMessageList.add(0, dataMessage);
}
MessageResultHolder messageResultHolder = new MessageResultHolder(resultMessageList,
latestMsgId, messageMode, MessageResultHolder.RESULT_MODE_REFRESH);
message.obj = messageResultHolder;
message.arg1 = PARSE_SUCCESS;
} catch (Exception e) {
Log.e("parse excepti9on", "" + e);
}
}
}
}
if (message.arg1 == PARSE_FAILED && source.contains(login_timeout)) {
message.arg1 = PARSE_SPECIFIC_ERROR;
}
loadHandler.sendMessage(message);
}
}.start();
}
public static void parseNextMessage(
final MessageListParseCallBack messageListParseCallBack,
final String source, final UserBean userBean,
final int messageMode, final String referer) {
final Handler loadHandler = new Handler() {
// 子类必须重写此方法,接受数据
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
// 此处可以更新UI
switch (msg.arg1) {
case PARSE_SUCCESS:
MessageResultHolder messageResultHolder = (MessageResultHolder) msg.obj;
messageListParseCallBack.onBack(messageResultHolder, msg.arg1);
break;
default:
messageListParseCallBack.onBack(null, msg.arg1);
break;
}
}
};
new Thread() {
public void run() {
Message message = new Message();
message.arg1 = PARSE_FAILED;
Document document = Jsoup.parse(source);
Elements scriptElements = document.getElementsByTag("script");
for (Element nowElement : scriptElements) {
if (nowElement.html().contains("wx.cgiData ")) {
JSONObject contentObject = getMessageArray(nowElement.html());
if (contentObject != null) {
try {
JSONArray getArray = contentObject.getJSONArray("messageArray");
ArrayList<MessageBean> resultMessageList = getMessageItems(
getArray, userBean, referer);
String latestMsgId = contentObject.get("lastMsgId").toString();
MessageResultHolder messageResultHolder = new MessageResultHolder(resultMessageList, latestMsgId, messageMode, MessageResultHolder.RESULT_MODE_ADD);
message.obj = messageResultHolder;
message.arg1 = PARSE_SUCCESS;
} catch (Exception e) {
}
}
}
}
if (message.arg1 == PARSE_FAILED && source.contains(login_timeout)) {
message.arg1 = PARSE_SPECIFIC_ERROR;
}
loadHandler.sendMessage(message);
}
}.start();
}
public interface MaterialListParseCallBack {
public void onBack(int code, MaterialResultHolder materialResultHolder);
}
public static void parseMaterialList(
final MaterialListParseCallBack materialListParseCallBack,
final int begin,
final String source, final UserBean userBean,
final String referer) {
final Handler loadHandler = new Handler() {
// 子类必须重写此方法,接受数据
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
// 此处可以更新UI
switch (msg.arg1) {
case PARSE_SUCCESS:
materialListParseCallBack.onBack(msg.arg1, (MaterialResultHolder) msg.obj);
break;
default:
materialListParseCallBack.onBack(msg.arg1, null);
break;
}
}
};
new Thread() {
public void run() {
Message message = new Message();
message.arg1 = PARSE_FAILED;
try {
JSONObject contentObject = new JSONObject(source);
JSONObject resultObject = contentObject.getJSONObject("base_resp");
if (getRet(resultObject) == 0) {
JSONObject fileContentObject = contentObject.getJSONObject("page_info");
JSONArray materialArray = fileContentObject.getJSONArray("file_item");
Gson gson = new Gson();
ArrayList<MaterialBean> getList = new ArrayList<MaterialBean>();
for (int i = 0; i < materialArray.length(); i++) {
JSONObject nowItemObject = materialArray.getJSONObject(i);
MaterialBean nowItemBean = gson.fromJson(nowItemObject.toString(), MaterialBean.class);
getList.add(nowItemBean);
}
MaterialResultHolder materialResultHolder = new MaterialResultHolder(getList, (begin == 0) ? MaterialResultHolder.RESULT_MODE_REFRESH : MaterialResultHolder.RESULT_MODE_ADD);
message.arg1 = PARSE_SUCCESS;
message.obj = materialResultHolder;
}
} catch (Exception e) {
Log.e("material list parse error", "" + e);
}
if (message.arg1 == PARSE_FAILED && source.contains(login_timeout)) {
message.arg1 = PARSE_SPECIFIC_ERROR;
}
loadHandler.sendMessage(message);
}
}.start();
}
public interface AppMsgListParseCallBack {
public void onBack(int code, MaterialResultHolder materialResultHolder);
}
public static void parseAppMsgList(
final AppMsgListParseCallBack messageListParseCallBack,
final int begin,
final String source, final UserBean userBean,
final String referer) {
final Handler loadHandler = new Handler() {
// 子类必须重写此方法,接受数据
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
// 此处可以更新UI
switch (msg.arg1) {
case PARSE_SUCCESS:
messageListParseCallBack.onBack(msg.arg1, (MaterialResultHolder) msg.obj);
break;
default:
messageListParseCallBack.onBack(msg.arg1, null);
break;
}
}
};
new Thread() {
public void run() {
Message message = new Message();
message.arg1 = PARSE_FAILED;
try {
JSONObject contentObject = new JSONObject(source);
JSONObject appContentObject = contentObject.getJSONObject("app_msg_info");
JSONArray appItemArray = appContentObject.getJSONArray("item");
JSONObject appInfoObject = appContentObject.getJSONObject("file_cnt");
Gson gson = new Gson();
/*
AppItemHolder appItemHolder = new AppItemHolder();
appItemHolder = (AppItemHolder) gson.fromJson(appInfoObject.toString(), AppItemHolder.class);
*/
ArrayList<MaterialBean> materialBeans = new ArrayList<MaterialBean>();
for (int i = 0; i < appItemArray.length(); i++) {
JSONObject nowItemObject = appItemArray.getJSONObject(i);
AppItemBean nowItemBean = gson.fromJson(nowItemObject.toString(), AppItemBean.class);
materialBeans.add(new MaterialBean(nowItemBean));
}
MaterialResultHolder materialResultHolder = new MaterialResultHolder(materialBeans,
begin==0?MaterialResultHolder.RESULT_MODE_REFRESH:MaterialResultHolder.RESULT_MODE_ADD);
message.arg1 = PARSE_SUCCESS;
message.obj = materialResultHolder;
} catch (Exception e) {
Log.e("app list parse error", "" + e);
}
if (message.arg1 == PARSE_FAILED && source.contains(login_timeout)) {
message.arg1 = PARSE_SPECIFIC_ERROR;
}
loadHandler.sendMessage(message);
}
}.start();
}
public interface UploadInfoParseCallBack {
public void onBack(int code);
}
public static void parseUploadInfo(
final UploadInfoParseCallBack uploadInfoParseCallBack,
final String source, final UploadHelper uploadHelper) {
final Handler loadHandler = new Handler() {
// 子类必须重写此方法,接受数据
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
// 此处可以更新UI
switch (msg.arg1) {
case PARSE_SUCCESS:
uploadInfoParseCallBack.onBack(msg.arg1);
break;
default:
uploadInfoParseCallBack.onBack(msg.arg1);
break;
}
}
};
new Thread() {
public void run() {
Message message = new Message();
message.arg1 = PARSE_FAILED;
try {
String ticket = getTickets(source);
Log.e("get ticket", "" + ticket);
if (ticket != null) {
uploadHelper.setTicket(ticket);
message.arg1 = PARSE_SUCCESS;
}
} catch (Exception e) {
Log.e("upload info parse error", "" + e);
}
loadHandler.sendMessage(message);
}
private String getTickets(String source) {
String result = null;
String regx = "data:(\\{[^\\}]*)";
Pattern pattern = Pattern.compile(regx);
Matcher matcher = pattern.matcher(source);
while (matcher.find()) {
String dataString = matcher.group(1);
Log.e("get data", "" + dataString);
if (dataString != null) {
regx = "ticket:\"([^\"]*)\"";
pattern = Pattern.compile(regx);
matcher = pattern.matcher(dataString);
while (matcher.find()) {
String ticket = matcher.group(1);
return ticket;
}
}
}
return result;
}
}.start();
}
public interface LoginParseCallBack {
public void onBack(int code, UserBean userBean);
}
public static void parseLogin(
final LoginParseCallBack loginParseCallBack,
final String source, final Header[] headers, final UserBean userBean) {
final Handler loadHandler = new Handler() {
// 子类必须重写此方法,接受数据
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
// 此处可以更新UI
switch (msg.arg1) {
case PARSE_SUCCESS:
loginParseCallBack.onBack(msg.arg1, (UserBean) msg.obj);
break;
default:
loginParseCallBack.onBack(msg.arg1, null);
break;
}
}
};
new Thread() {
public void run() {
Message message = new Message();
message.arg1 = PARSE_FAILED;
try {
JSONObject resultJsonObject = null;
try {
resultJsonObject = new JSONObject(source);
int ret = getRet(resultJsonObject);
if (ret == RET_LOGIN_SUCCESS) {
if (source.contains("token")) {
String tokenString = getToken(resultJsonObject);
userBean.setToken(tokenString);
initNormalLogin();
message.arg1 = PARSE_SUCCESS;
message.obj = userBean;
} else {
if (source.contains(LOGIN_NEEDS_VERIFY)) {
initVerify();
message.arg1 = PARSE_SPECIFIC_STUATION;
message.obj = userBean;
}
}
}
} catch (Exception exception) {
Log.e("login exception fuck", exception + "");
}
} catch (Exception e) {
Log.e("app list parse error", "" + e);
}
if (message.arg1 == PARSE_FAILED && source.contains(login_timeout)) {
message.arg1 = PARSE_SPECIFIC_ERROR;
}
loadHandler.sendMessage(message);
}
private void initNormalLogin() {
for (int i = 0; i < headers.length; i++) {
if (headers[i].getName().contains(
"Set-Cookie")) {
String nowCookie = headers[i]
.getValue();
if (nowCookie.contains("slave_user")) {
String slaveUser = nowCookie
.substring(
nowCookie
.indexOf("slave_user") + 11,
nowCookie.indexOf(";"));
userBean.setSlaveUser(slaveUser);
}
if (nowCookie.contains("slave_sid")) {
String slaveSid = nowCookie
.substring(nowCookie
.indexOf("slave_sid") + 10,
nowCookie.indexOf(";"));
userBean.setSlaveSid(slaveSid);
}
}
}
}
private void initVerify() {
try {
JSONObject resultObject = new JSONObject(source);
String errorMsg = resultObject.get("ErrMsg").toString();
String regex = "phone=(.*)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(errorMsg);
while (matcher.find()) {
String phone = matcher.group(1);
if (phone != null) {
userBean.setPhone(phone);
}
}
} catch (Exception e) {
}
}
}.start();
}
public interface VerifyPageParseCallBack {
public void onBack(int code, UserBean userBean);
}
public static void parseVerifyPage(
final VerifyPageParseCallBack verifyPageParseCallBack,
final String source, final Header[] headers, final UserBean userBean) {
final Handler loadHandler = new Handler() {
// 子类必须重写此方法,接受数据
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
// 此处可以更新UI
switch (msg.arg1) {
case PARSE_SUCCESS:
verifyPageParseCallBack.onBack(msg.arg1, (UserBean) msg.obj);
break;
default:
verifyPageParseCallBack.onBack(msg.arg1, null);
break;
}
}
};
new Thread() {
public void run() {
Message message = new Message();
message.arg1 = PARSE_FAILED;
try {
Log.e("result", source);
initNormalLogin();
message.arg1 = PARSE_SUCCESS;
message.obj = userBean;
} catch (Exception e) {
Log.e("app list parse error", "" + e);
}
if (message.arg1 == PARSE_FAILED && source.contains(login_timeout)) {
message.arg1 = PARSE_SPECIFIC_ERROR;
}
loadHandler.sendMessage(message);
}
private void initNormalLogin() {
for (int i = 0; i < headers.length; i++) {
Log.e("get verify page", "" + headers[i].getValue());
if (headers[i].getName().contains(
"Set-Cookie")) {
String nowCookie = headers[i]
.getValue();
if (nowCookie.contains("ticket_id")) {
Log.e("get ticket id", "" + headers[i].getValue());
}
if (nowCookie.contains("ticket")) {
Log.e("get ticket", "" + headers[i].getValue());
}
}
}
}
private void initVerify() {
Log.e("start get verify", "start");
for (int i = 0; i < headers.length; i++) {
if (headers[i].getName().contains(
"Set-Cookie")) {
Log.e("start get verify", "get cookie\n" + headers[i].getValue());
String nowCookie = headers[i]
.getValue();
if (nowCookie.contains("verifysession")) {
Log.e("start get verify", "get session");
String regex = "verifysession=([^;]*);";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(nowCookie);
while (matcher.find()) {
String verifySession = matcher.group(1);
Log.e("get verify session", verifySession + "");
userBean.setVerifySession(verifySession);
}
}
}
}
}
}.start();
}
public static String getVerifyUrl(String source) {
try {
} catch (Exception e) {
}
return "";
}
private static String getToken(JSONObject resultJsonObject) {
String tokenString = "";
try {
String contentString = resultJsonObject.getString("ErrMsg");
String regex = "token=(\\d*)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(contentString);
while (matcher.find()) {
String getToken = matcher.group(1);
if (getToken != null) {
tokenString = getToken;
}
}
} catch (Exception e) {
}
return tokenString;
}
private static JSONObject getMessageArray(String source) {
try {
String reg = "latest_msg_id\\s:\\s'(\\d*)',[^\\(]*\\(\\{\"msg_item\":(\\[.*(?=\\}\\).msg_item))";
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(source);
while (matcher.find()) {
String lastMsgId = matcher.group(1);
String messageArray = matcher.group(2);
if (lastMsgId != null && messageArray != null) {
JSONObject contentObject = new JSONObject();
contentObject.put("lastMsgId", lastMsgId);
contentObject.put("messageArray", new JSONArray(messageArray));
return contentObject;
}
}
} catch (Exception exception) {
Log.e("get message array exception", "" + exception);
}
return null;
}
private static ArrayList<MessageBean> getMessageItems(JSONArray jsonArray,
UserBean userBean, String referer) {
ArrayList<MessageBean> messageBeans = new ArrayList<MessageBean>();
Gson gson = new Gson();
for (int i = 0; i < jsonArray.length(); i++) {
try {
JSONObject nowJsonObject = jsonArray.getJSONObject(i);
nowJsonObject.put("token", userBean.getToken());
nowJsonObject.put("slave_sid", userBean.getSlaveSid());
nowJsonObject.put("slave_user", userBean.getSlaveUser());
nowJsonObject.put("referer", referer);
MessageBean nowItem = (MessageBean) gson.fromJson(
nowJsonObject.toString(), MessageBean.class);
messageBeans.add(nowItem);
} catch (Exception exception) {
Log.e("parse errror", exception + "");
}
}
return messageBeans;
}
public interface FansListParseCallback {
public void onBack(FansResultHolder fansResultHolder, int code);
}
public static void parseFansList(final String source, final String referer, final int currentGroupIndex,
final UserBean userBean,
final boolean refresh,
final FansListParseCallback fansListParseCallback) {
final Handler loadHandler = new Handler() {
// 子类必须重写此方法,接受数据
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.arg1) {
case PARSE_SUCCESS:
fansListParseCallback.onBack((FansResultHolder) msg.obj, msg.arg1);
break;
default:
fansListParseCallback.onBack(null, msg.arg1);
break;
}
}
};
new Thread() {
public void run() {
Message nowMessage = new Message();
nowMessage.arg1 = PARSE_FAILED;
JSONObject fansContentObject = getFansContentObject(source);
if (fansContentObject != null) {
try {
String fansTypeString = fansContentObject.get("fansType").toString();
String fansContentString = fansContentObject.get("fansContent").toString();
Gson gson = new Gson();
JSONArray fansTypeArray = new JSONArray(fansTypeString);
ArrayList<FansGroupBean> fansGroupBeans = new ArrayList<FansGroupBean>();
for (int i = 0; i < fansTypeArray.length(); i++) {
JSONObject nowJsonObject = fansTypeArray
.getJSONObject(i);
FansGroupBean nowGroupBean = (FansGroupBean) gson
.fromJson(nowJsonObject.toString(),
FansGroupBean.class);
fansGroupBeans.add(nowGroupBean);
}
JSONArray fansArray = new JSONArray(fansContentString);
ArrayList<FansBean> fansBeans = new ArrayList<FansBean>();
for (int i = 0; i < fansArray.length(); i++) {
JSONObject nowJsonObject = fansArray.getJSONObject(i);
FansBean nowFansBean = (FansBean) gson.fromJson(
nowJsonObject.toString(), FansBean.class);
nowFansBean.setReferer(referer);
fansBeans.add(nowFansBean);
}
if (refresh) {
//add fans data
FansBean dataBean = new FansBean();
dataBean.setBeanType(FansBean.BEAN_TYPE_DATA);
fansBeans.add(0, dataBean);
}
FansResultHolder fansResultHolder = new FansResultHolder(fansBeans, fansGroupBeans, currentGroupIndex,
refresh ? FansResultHolder.RESULT_MODE_REFRESH : FansResultHolder.RESULT_MODE_ADD);
nowMessage.arg1 = PARSE_SUCCESS;
nowMessage.obj = fansResultHolder;
} catch (Exception exception) {
Log.e("fans parse errror", "" + exception);
}
loadHandler.sendMessage(nowMessage);
}
}
private JSONObject getFansContentObject(String source) {
String regex = "groupsList\\s*:\\s*\\(\\{\"groups\":(\\[[^\\]]*\\])[^\\[]*(\\[[^\\]]*])";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(source);
while (matcher.find()) {
String fansType = matcher.group(1);
String fansContent = matcher.group(2);
JSONObject fansContentObject = new JSONObject();
try {
fansContentObject.put("fansType", fansType);
fansContentObject.put("fansContent", fansContent);
return fansContentObject;
} catch (Exception e) {
}
}
return null;
}
}.start();
}
public interface ParseFansProfileCallBack {
public void onBack(int code, FansProfileHolder fansProfileHolder);
}
public static class FansProfileHolder {
public FansBean fansBean;
public ArrayList<FansGroupBean> fansGroupBeans;
public FansProfileHolder(FansBean fansBean, ArrayList<FansGroupBean> fansGroupBeans) {
this.fansBean = fansBean;
this.fansGroupBeans = fansGroupBeans;
}
}
public static void parseFansProfile(final String source,
final UserBean userBean,
final ParseFansProfileCallBack parseFansProfileCallBack) {
final Handler loadHandler = new Handler() {
// 子类必须重写此方法,接受数据
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
// 此处可以更新UI
switch (msg.arg1) {
case PARSE_SUCCESS:
FansProfileHolder fansProfileHolder = (FansProfileHolder) msg.obj;
parseFansProfileCallBack.onBack(msg.arg1, fansProfileHolder);
break;
default:
parseFansProfileCallBack.onBack(msg.arg1, null);
break;
}
}
};
new Thread() {
public void run() {
FansProfileHolder fansProfileHolder = getResult();
Message message = new Message();
if (fansProfileHolder != null) {
message.arg1 = PARSE_SUCCESS;
message.obj = fansProfileHolder;
} else {
if (source.contains(login_timeout) || source.contains(invalid_bizpay)) {
message.arg1 = PARSE_SPECIFIC_ERROR;
} else {
message.arg1 = PARSE_FAILED;
}
}
loadHandler.sendMessage(message);
}
private FansProfileHolder getResult() {
try {
JSONObject resultObject = new JSONObject(source);
JSONObject stateObject = resultObject.getJSONObject("base_resp");
if (getRet(stateObject) == 0) {
JSONObject contactInfoObject = resultObject.getJSONObject("contact_info");
JSONObject groupObject = resultObject.getJSONObject("groups");
Gson gson = new Gson();
FansBean fansBean = (FansBean) gson.fromJson(contactInfoObject.toString(), FansBean.class);
JSONArray fansTypeArray = groupObject.getJSONArray("groups");
ArrayList<FansGroupBean> fansGroupBeans = new ArrayList<FansGroupBean>();
for (int i = 0; i < fansTypeArray.length(); i++) {
JSONObject nowJsonObject = fansTypeArray
.getJSONObject(i);
FansGroupBean nowGroupBean = (FansGroupBean) gson
.fromJson(nowJsonObject.toString(),
FansGroupBean.class);
fansGroupBeans.add(nowGroupBean);
}
FansProfileHolder fansProfileHolder = new FansProfileHolder(fansBean, fansGroupBeans);
return fansProfileHolder;
}
} catch (Exception e) {
Log.e("fans profile parse exception", "" + e);
}
return null;
}
}.start();
}
public interface ChatListParseCallback {
public void onBack(ChatHolder chatHolder, boolean dataChanged);
}
public static void parseChatList(final String source,
final ChatHolder chatHolder,
final ChatListParseCallback chatListParseCallback) {
final Handler loadHandler = new Handler() {
// 子类必须重写此方法,接受数据
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
// 此处可以更新UI
boolean dataChanged = false;
if (msg.arg1 == 1) {
dataChanged = true;
}
chatListParseCallback.onBack(chatHolder, dataChanged);
}
};
new Thread() {
public void run() {
JSONObject chatContentObject = getChatContentObject(source);
if (chatContentObject != null) {
try {
String messageContent = chatContentObject.get("messageContent").toString();
Gson gson = new Gson();
JSONArray messageArray = new JSONArray(messageContent);
ArrayList<MessageBean> messageBeans = new ArrayList<MessageBean>();
for (int i = 0; i < messageArray.length(); i++) {
JSONObject nowJsonObject = messageArray
.getJSONObject(i);
MessageBean nowMessageBean = (MessageBean) gson
.fromJson(nowJsonObject.toString(),
MessageBean.class);
if (nowMessageBean.getFakeId().equals(chatHolder.getToFakeId())) {
nowMessageBean.setOwner(MessageBean.MESSAGE_OWNER_HER);
} else {
nowMessageBean.setOwner(MessageBean.MESSAGE_OWNER_ME);
}
//reverse
messageBeans.add(0, nowMessageBean);
}
setTimeTagShow(messageBeans);
chatHolder.setMessage(messageBeans);
Message nowMessage = new Message();
nowMessage.arg1 = 1;
loadHandler.sendMessage(nowMessage);
} catch (Exception exception) {
Log.e("chat parse errror", "" + exception);
}
}
}
private JSONObject getChatContentObject(String source) {
String regex = "msg_item\":(\\[.*\\](?=\\}\\}))";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(source);
while (matcher.find()) {
String messageContent = matcher.group(1);
JSONObject chatContentObject = new JSONObject();
try {
chatContentObject.put("messageContent", messageContent);
return chatContentObject;
} catch (Exception e) {
}
}
return null;
}
long lastTime = 0;
private void setTimeTagShow(ArrayList<MessageBean> messageBeans) {
for (int i = 0; i < messageBeans.size(); i++) {
MessageBean nowBean = messageBeans.get(i);
long nowTime = Long.parseLong(nowBean.getDateTime());
if (nowTime - lastTime > 100000) {
nowBean.setTimeTagShow(true);
}
lastTime = nowTime;
}
}
}.start();
}
public static int getRet(JSONObject resultObject) {
try {
if (resultObject.get("Ret") != null) {
return Integer.parseInt("" + resultObject.get("Ret"));
}
} catch (Exception e) {
}
try {
if (resultObject.get("ret") != null) {
return Integer.parseInt("" + resultObject.get("ret"));
}
} catch (Exception e) {
}
return GET_RET_NONE;
}
private static void removeEmptyMessage(ArrayList<MessageBean> messageBeans) {
for (int i = 0; i < messageBeans.size(); i++) {
if (messageBeans.get(i).getType() == MessageBean.MESSAGE_TYPE_EMPTY) {
messageBeans.remove(i);
}
}
}
public static final int GET_RET_NONE = -1;
}