fix:update Modify entity class serialization

This commit is contained in:
SL 2024-05-29 09:56:59 +08:00
parent 05a454bf60
commit deaf7fbbc8
10 changed files with 112 additions and 65 deletions

View File

@ -7,7 +7,7 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:8.4.0' classpath 'com.android.tools.build:gradle:8.4.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
} }
} }

View File

@ -10,14 +10,10 @@ import android.text.TextUtils;
import com.xinbida.wukongim.WKIMApplication; import com.xinbida.wukongim.WKIMApplication;
import com.xinbida.wukongim.entity.WKChannel; import com.xinbida.wukongim.entity.WKChannel;
import com.xinbida.wukongim.entity.WKChannelSearchResult; import com.xinbida.wukongim.entity.WKChannelSearchResult;
import com.xinbida.wukongim.utils.WKCommonUtils;
import com.xinbida.wukongim.utils.WKLoggerUtils; import com.xinbida.wukongim.utils.WKLoggerUtils;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List; import java.util.List;
/** /**
@ -394,26 +390,8 @@ public class ChannelDBManager {
channel.parentChannelType = WKCursor.readByte(cursor, WKDBColumns.WKChannelColumns.parent_channel_type); channel.parentChannelType = WKCursor.readByte(cursor, WKDBColumns.WKChannelColumns.parent_channel_type);
String extra = WKCursor.readString(cursor, WKDBColumns.WKChannelColumns.localExtra); String extra = WKCursor.readString(cursor, WKDBColumns.WKChannelColumns.localExtra);
String remoteExtra = WKCursor.readString(cursor, WKDBColumns.WKChannelColumns.remote_extra); String remoteExtra = WKCursor.readString(cursor, WKDBColumns.WKChannelColumns.remote_extra);
channel.localExtra = getChannelExtra(extra); channel.localExtra = WKCommonUtils.str2HashMap(extra);
channel.remoteExtraMap = getChannelExtra(remoteExtra); channel.remoteExtraMap = WKCommonUtils.str2HashMap(remoteExtra);
return channel; return channel;
} }
public HashMap<String, Object> getChannelExtra(String extra) {
HashMap<String, Object> hashMap = new HashMap<>();
if (!TextUtils.isEmpty(extra)) {
try {
JSONObject jsonObject = new JSONObject(extra);
Iterator<String> keys = jsonObject.keys();
while (keys.hasNext()) {
String key = keys.next();
hashMap.put(key, jsonObject.opt(key));
}
} catch (JSONException e) {
WKLoggerUtils.getInstance().e(TAG , "get channel getChannelExtra error");
}
}
return hashMap;
}
} }

View File

@ -199,7 +199,7 @@ public class ChannelMembersDbManager {
try { try {
cv = WKSqlContentValues.getContentValuesWithChannelMember(channelMember); cv = WKSqlContentValues.getContentValuesWithChannelMember(channelMember);
} catch (Exception e) { } catch (Exception e) {
WKLoggerUtils.getInstance().e(TAG , "insert error"); WKLoggerUtils.getInstance().e(TAG, "insert error");
} }
WKIMApplication.getInstance().getDbHelper() WKIMApplication.getInstance().getDbHelper()
.insert(channelMembers, cv); .insert(channelMembers, cv);
@ -237,19 +237,19 @@ public class ChannelMembersDbManager {
public void insertMembers(List<WKChannelMember> allMemberList, List<WKChannelMember> existList) { public void insertMembers(List<WKChannelMember> allMemberList, List<WKChannelMember> existList) {
List<ContentValues> insertCVList = new ArrayList<>(); List<ContentValues> insertCVList = new ArrayList<>();
List<ContentValues> updateCVList = new ArrayList<>(); // List<ContentValues> updateCVList = new ArrayList<>();
for (WKChannelMember channelMember : allMemberList) { for (WKChannelMember channelMember : allMemberList) {
boolean isAdd = true; // boolean isAdd = true;
for (WKChannelMember cm : existList) { // for (WKChannelMember cm : existList) {
if (channelMember.memberUID.equals(cm.memberUID)) { // if (channelMember.memberUID.equals(cm.memberUID)) {
isAdd = false; // isAdd = false;
updateCVList.add(WKSqlContentValues.getContentValuesWithChannelMember(channelMember)); // updateCVList.add(WKSqlContentValues.getContentValuesWithChannelMember(channelMember));
break; // break;
} // }
} // }
if (isAdd) { // if (isAdd) {
insertCVList.add(WKSqlContentValues.getContentValuesWithChannelMember(channelMember)); insertCVList.add(WKSqlContentValues.getContentValuesWithChannelMember(channelMember));
} // }
} }
WKIMApplication.getInstance().getDbHelper().getDb() WKIMApplication.getInstance().getDbHelper().getDb()
.beginTransaction(); .beginTransaction();
@ -259,16 +259,16 @@ public class ChannelMembersDbManager {
WKIMApplication.getInstance().getDbHelper().insert(channelMembers, cv); WKIMApplication.getInstance().getDbHelper().insert(channelMembers, cv);
} }
} }
if (WKCommonUtils.isNotEmpty(updateCVList)) { // if (WKCommonUtils.isNotEmpty(updateCVList)) {
for (ContentValues cv : updateCVList) { // for (ContentValues cv : updateCVList) {
String[] update = new String[3]; // String[] update = new String[3];
update[0] = cv.getAsString(WKDBColumns.WKChannelMembersColumns.channel_id); // update[0] = cv.getAsString(WKDBColumns.WKChannelMembersColumns.channel_id);
update[1] = String.valueOf(cv.getAsByte(WKDBColumns.WKChannelMembersColumns.channel_type)); // update[1] = String.valueOf(cv.getAsByte(WKDBColumns.WKChannelMembersColumns.channel_type));
update[2] = cv.getAsString(WKDBColumns.WKChannelMembersColumns.member_uid); // update[2] = cv.getAsString(WKDBColumns.WKChannelMembersColumns.member_uid);
WKIMApplication.getInstance().getDbHelper() // WKIMApplication.getInstance().getDbHelper()
.update(channelMembers, cv, WKDBColumns.WKChannelMembersColumns.channel_id + "=? and " + WKDBColumns.WKChannelMembersColumns.channel_type + "=? and " + WKDBColumns.WKChannelMembersColumns.member_uid + "=?", update); // .update(channelMembers, cv, WKDBColumns.WKChannelMembersColumns.channel_id + "=? and " + WKDBColumns.WKChannelMembersColumns.channel_type + "=? and " + WKDBColumns.WKChannelMembersColumns.member_uid + "=?", update);
} // }
} // }
WKIMApplication.getInstance().getDbHelper().getDb().setTransactionSuccessful(); WKIMApplication.getInstance().getDbHelper().getDb().setTransactionSuccessful();
} finally { } finally {
if (WKIMApplication.getInstance().getDbHelper().getDb().inTransaction()) { if (WKIMApplication.getInstance().getDbHelper().getDb().inTransaction()) {
@ -301,7 +301,7 @@ public class ChannelMembersDbManager {
try { try {
cv = WKSqlContentValues.getContentValuesWithChannelMember(channelMember); cv = WKSqlContentValues.getContentValuesWithChannelMember(channelMember);
} catch (Exception e) { } catch (Exception e) {
WKLoggerUtils.getInstance().e(TAG , "update error"); WKLoggerUtils.getInstance().e(TAG, "update error");
} }
WKIMApplication.getInstance().getDbHelper() WKIMApplication.getInstance().getDbHelper()
.update(channelMembers, cv, WKDBColumns.WKChannelMembersColumns.channel_id + "=? and " + WKDBColumns.WKChannelMembersColumns.channel_type + "=? and " + WKDBColumns.WKChannelMembersColumns.member_uid + "=?", update); .update(channelMembers, cv, WKDBColumns.WKChannelMembersColumns.channel_id + "=? and " + WKDBColumns.WKChannelMembersColumns.channel_type + "=? and " + WKDBColumns.WKChannelMembersColumns.member_uid + "=?", update);
@ -524,7 +524,7 @@ public class ChannelMembersDbManager {
hashMap.put(key, jsonObject.opt(key)); hashMap.put(key, jsonObject.opt(key));
} }
} catch (JSONException e) { } catch (JSONException e) {
WKLoggerUtils.getInstance().e(TAG , "serializableChannelMember extra error"); WKLoggerUtils.getInstance().e(TAG, "serializableChannelMember extra error");
} }
channelMember.extraMap = hashMap; channelMember.extraMap = hashMap;
} }

View File

@ -142,9 +142,9 @@ public class ConversationDbManager {
WKChannel channel = ChannelDBManager.getInstance().serializableChannel(cursor); WKChannel channel = ChannelDBManager.getInstance().serializableChannel(cursor);
if (channel != null) { if (channel != null) {
String extra = WKCursor.readString(cursor, "channel_extra"); String extra = WKCursor.readString(cursor, "channel_extra");
channel.localExtra = ChannelDBManager.getInstance().getChannelExtra(extra); channel.localExtra = WKCommonUtils.str2HashMap(extra);
String remoteExtra = WKCursor.readString(cursor, "channel_remote_extra"); String remoteExtra = WKCursor.readString(cursor, "channel_remote_extra");
channel.remoteExtraMap = ChannelDBManager.getInstance().getChannelExtra(remoteExtra); channel.remoteExtraMap = WKCommonUtils.str2HashMap(remoteExtra);
channel.status = WKCursor.readInt(cursor, "channel_status"); channel.status = WKCursor.readInt(cursor, "channel_status");
channel.version = WKCursor.readLong(cursor, "channel_version"); channel.version = WKCursor.readLong(cursor, "channel_version");
channel.parentChannelID = WKCursor.readString(cursor, "c_parent_channel_id"); channel.parentChannelID = WKCursor.readString(cursor, "c_parent_channel_id");

View File

@ -4,6 +4,9 @@ import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import com.xinbida.wukongim.utils.DateUtils; import com.xinbida.wukongim.utils.DateUtils;
import com.xinbida.wukongim.utils.WKCommonUtils;
import org.json.JSONObject;
import java.util.HashMap; import java.util.HashMap;
@ -101,7 +104,6 @@ public class WKChannel implements Parcelable {
updatedAt = in.readString(); updatedAt = in.readString();
avatar = in.readString(); avatar = in.readString();
version = in.readLong(); version = in.readLong();
localExtra = in.readHashMap(HashMap.class.getClassLoader());
online = in.readInt(); online = in.readInt();
lastOffline = in.readLong(); lastOffline = in.readLong();
category = in.readString(); category = in.readString();
@ -109,13 +111,15 @@ public class WKChannel implements Parcelable {
robot = in.readInt(); robot = in.readInt();
username = in.readString(); username = in.readString();
avatarCacheKey = in.readString(); avatarCacheKey = in.readString();
remoteExtraMap = in.readHashMap(HashMap.class.getClassLoader());
flame = in.readInt(); flame = in.readInt();
flameSecond = in.readInt(); flameSecond = in.readInt();
deviceFlag = in.readInt(); deviceFlag = in.readInt();
parentChannelID = in.readString(); parentChannelID = in.readString();
parentChannelType = in.readByte(); parentChannelType = in.readByte();
// mainDeviceFlag = in.readInt(); String localStr = in.readString();
localExtra = WKCommonUtils.str2HashMap(localStr);
String remoteStr = in.readString();
remoteExtraMap = WKCommonUtils.str2HashMap(remoteStr);
} }
@Override @Override
@ -138,7 +142,6 @@ public class WKChannel implements Parcelable {
dest.writeString(updatedAt); dest.writeString(updatedAt);
dest.writeString(avatar); dest.writeString(avatar);
dest.writeLong(version); dest.writeLong(version);
dest.writeMap(localExtra);
dest.writeInt(online); dest.writeInt(online);
dest.writeLong(lastOffline); dest.writeLong(lastOffline);
dest.writeString(category); dest.writeString(category);
@ -146,13 +149,23 @@ public class WKChannel implements Parcelable {
dest.writeInt(robot); dest.writeInt(robot);
dest.writeString(username); dest.writeString(username);
dest.writeString(avatarCacheKey); dest.writeString(avatarCacheKey);
dest.writeMap(remoteExtraMap);
dest.writeInt(flame); dest.writeInt(flame);
dest.writeInt(flameSecond); dest.writeInt(flameSecond);
dest.writeInt(deviceFlag); dest.writeInt(deviceFlag);
dest.writeString(parentChannelID); dest.writeString(parentChannelID);
dest.writeByte(parentChannelType); dest.writeByte(parentChannelType);
// dest.writeInt(mainDeviceFlag); String localExtraStr = "";
String remoteExtraStr = "";
if (localExtra != null && !localExtra.isEmpty()) {
JSONObject jsonObject = new JSONObject(localExtra);
localExtraStr = jsonObject.toString();
}
dest.writeString(localExtraStr);
if (remoteExtraMap != null && !remoteExtraMap.isEmpty()) {
JSONObject jsonObject = new JSONObject(remoteExtraMap);
remoteExtraStr = jsonObject.toString();
}
dest.writeString(remoteExtraStr);
} }
@Override @Override

View File

@ -4,6 +4,9 @@ import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import com.xinbida.wukongim.utils.DateUtils; import com.xinbida.wukongim.utils.DateUtils;
import com.xinbida.wukongim.utils.WKCommonUtils;
import org.json.JSONObject;
import java.util.HashMap; import java.util.HashMap;
@ -69,12 +72,13 @@ public class WKChannelMember implements Parcelable {
createdAt = in.readString(); createdAt = in.readString();
updatedAt = in.readString(); updatedAt = in.readString();
version = in.readLong(); version = in.readLong();
extraMap = in.readHashMap(HashMap.class.getClassLoader());
remark = in.readString(); remark = in.readString();
memberInviteUID = in.readString(); memberInviteUID = in.readString();
robot = in.readInt(); robot = in.readInt();
forbiddenExpirationTime = in.readLong(); forbiddenExpirationTime = in.readLong();
memberAvatarCacheKey = in.readString(); memberAvatarCacheKey = in.readString();
String extraStr = in.readString();
extraMap = WKCommonUtils.str2HashMap(extraStr);
} }
@Override @Override
@ -92,12 +96,17 @@ public class WKChannelMember implements Parcelable {
dest.writeString(createdAt); dest.writeString(createdAt);
dest.writeString(updatedAt); dest.writeString(updatedAt);
dest.writeLong(version); dest.writeLong(version);
dest.writeMap(extraMap);
dest.writeString(remark); dest.writeString(remark);
dest.writeString(memberInviteUID); dest.writeString(memberInviteUID);
dest.writeInt(robot); dest.writeInt(robot);
dest.writeLong(forbiddenExpirationTime); dest.writeLong(forbiddenExpirationTime);
dest.writeString(memberAvatarCacheKey); dest.writeString(memberAvatarCacheKey);
String extraStr = "";
if (extraMap != null && !extraMap.isEmpty()) {
JSONObject jsonObject = new JSONObject(extraMap);
extraStr = jsonObject.toString();
}
dest.writeString(extraStr);
} }
@Override @Override

View File

@ -9,6 +9,7 @@ import com.xinbida.wukongim.manager.ChannelMembersManager;
import com.xinbida.wukongim.message.type.WKSendMsgResult; import com.xinbida.wukongim.message.type.WKSendMsgResult;
import com.xinbida.wukongim.msgmodel.WKMessageContent; import com.xinbida.wukongim.msgmodel.WKMessageContent;
import com.xinbida.wukongim.utils.DateUtils; import com.xinbida.wukongim.utils.DateUtils;
import com.xinbida.wukongim.utils.WKCommonUtils;
import org.json.JSONObject; import org.json.JSONObject;
@ -119,7 +120,8 @@ public class WKMsg implements Parcelable {
createdAt = in.readString(); createdAt = in.readString();
updatedAt = in.readString(); updatedAt = in.readString();
searchableWord = in.readString(); searchableWord = in.readString();
localExtraMap = in.readHashMap(HashMap.class.getClassLoader()); String localExtraStr = in.readString();
localExtraMap = WKCommonUtils.str2HashMap(localExtraStr);
baseContentMsgModel = in.readParcelable(WKMsg.class baseContentMsgModel = in.readParcelable(WKMsg.class
.getClassLoader()); .getClassLoader());
from = in.readParcelable(WKChannel.class.getClassLoader()); from = in.readParcelable(WKChannel.class.getClassLoader());
@ -175,7 +177,7 @@ public class WKMsg implements Parcelable {
dest.writeString(createdAt); dest.writeString(createdAt);
dest.writeString(updatedAt); dest.writeString(updatedAt);
dest.writeString(searchableWord); dest.writeString(searchableWord);
dest.writeMap(localExtraMap); dest.writeString(getLocalMapExtraString());
dest.writeParcelable(baseContentMsgModel, flags); dest.writeParcelable(baseContentMsgModel, flags);
dest.writeParcelable(from, flags); dest.writeParcelable(from, flags);
dest.writeParcelable(memberOfFrom, flags); dest.writeParcelable(memberOfFrom, flags);
@ -194,7 +196,7 @@ public class WKMsg implements Parcelable {
public String getLocalMapExtraString() { public String getLocalMapExtraString() {
String extras = ""; String extras = "";
if (localExtraMap != null && localExtraMap.size() > 0) { if (localExtraMap != null && !localExtraMap.isEmpty()) {
JSONObject jsonObject = new JSONObject(localExtraMap); JSONObject jsonObject = new JSONObject(localExtraMap);
extras = jsonObject.toString(); extras = jsonObject.toString();
} }

View File

@ -812,6 +812,28 @@ public class MsgManager extends BaseManager {
if (!isSuccess) { if (!isSuccess) {
WKLoggerUtils.getInstance().e(TAG, "saveRemoteExtraMsg delete message error"); WKLoggerUtils.getInstance().e(TAG, "saveRemoteExtraMsg delete message error");
} }
String deletedMsgId = "";
WKConversationMsg conversationMsg = ConversationDbManager.getInstance().queryWithChannel(channel.channelID, channel.channelType);
if (conversationMsg != null && !TextUtils.isEmpty(conversationMsg.lastClientMsgNO)) {
WKMsg msg = getWithClientMsgNO(conversationMsg.lastClientMsgNO);
if (msg != null && !TextUtils.isEmpty(msg.messageID) && msg.messageSeq != 0) {
for (String msgId : deleteMsgIds) {
if (msg.messageID.equals(msgId)) {
deletedMsgId = msgId;
break;
}
}
}
}
if (!TextUtils.isEmpty(deletedMsgId) && conversationMsg != null) {
int rowNo = WKIM.getInstance().getMsgManager().getRowNoWithMessageID(channel.channelID, channel.channelType, deletedMsgId);
if (rowNo < conversationMsg.unreadCount) {
conversationMsg.unreadCount--;
}
WKIM.getInstance().getConversationManager().updateWithMsg(conversationMsg);
WKUIConversationMsg wkuiConversationMsg = WKIM.getInstance().getConversationManager().getUIConversationMsg(channel.channelID, channel.channelType);
WKIM.getInstance().getConversationManager().setOnRefreshMsg(wkuiConversationMsg, true, TAG + " saveRemoteExtraMsg");
}
} }
getMsgReactionsAndRefreshMsg(messageIds, updatedMsgList); getMsgReactionsAndRefreshMsg(messageIds, updatedMsgList);
} }

View File

@ -538,7 +538,6 @@ public class WKConnection {
connection.setAttachment("close" + connection.getId()); connection.setAttachment("close" + connection.getId());
connection.close(); connection.close();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace();
WKLoggerUtils.getInstance().e("stop connection IOException" + e.getMessage()); WKLoggerUtils.getInstance().e("stop connection IOException" + e.getMessage());
} }
} }

View File

@ -1,10 +1,17 @@
package com.xinbida.wukongim.utils; package com.xinbida.wukongim.utils;
import android.text.TextUtils;
import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List; import java.util.List;
public class WKCommonUtils { public class WKCommonUtils {
private static final String TAG = "WKCommonUtils";
public static String stringValue(JSONObject jsonObject, String key) { public static String stringValue(JSONObject jsonObject, String key) {
if (jsonObject == null || !jsonObject.has(key)) if (jsonObject == null || !jsonObject.has(key))
return ""; return "";
@ -18,4 +25,21 @@ public class WKCommonUtils {
public static <T> boolean isEmpty(List<T> list) { public static <T> boolean isEmpty(List<T> list) {
return list == null || list.isEmpty(); return list == null || list.isEmpty();
} }
public static HashMap<String, Object> str2HashMap(String extra) {
HashMap<String, Object> hashMap = new HashMap<>();
if (!TextUtils.isEmpty(extra)) {
try {
JSONObject jsonObject = new JSONObject(extra);
Iterator<String> keys = jsonObject.keys();
while (keys.hasNext()) {
String key = keys.next();
hashMap.put(key, jsonObject.opt(key));
}
} catch (JSONException e) {
WKLoggerUtils.getInstance().e(TAG, "str2HashMap error");
}
}
return hashMap;
}
} }