LiuSiXiang-007 1 year ago
parent
commit
1bd5adeff8
  1. 2
      app/src/main/java/com/kanglai/push/mapper/LoginMapper.java
  2. 21
      app/src/main/java/com/kanglai/push/ui/adapter/MessageSwipeableRecyclerAdapter.java
  3. 24
      app/src/main/java/com/kanglai/push/ui/fragment/MessageFragment.java
  4. 6
      app/src/main/java/com/kanglai/push/ui/vm/FocusDetailViewModel.java
  5. 5
      app/src/main/java/com/kanglai/push/ui/vm/FocusListViewModel.java
  6. 5
      app/src/main/java/com/kanglai/push/ui/vm/InstantViewModel.java
  7. 6
      app/src/main/java/com/kanglai/push/ui/vm/LinkDetailViewModel.java
  8. 154
      app/src/main/java/com/kanglai/push/ui/vm/MessageViewModel.java
  9. 47
      app/src/main/java/com/kanglai/push/util/HistoryMsgUtil.java
  10. 117
      app/src/main/java/com/kanglai/push/util/LocalPushChatMsgUtil.java

2
app/src/main/java/com/kanglai/push/mapper/LoginMapper.java

@ -34,7 +34,7 @@ public interface LoginMapper {
@FormUrlEncoded @FormUrlEncoded
@Headers({ @Headers({
"Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Content-Type: application/x-www-form-urlencoded; charset=utf-8",
"Authorization: Basic dGVzdDp0ZXN0" "Authorization: Basic a2ljY19ub3RpZnlfYXBwOmtpY2Nfbm90aWZ5X2FwcA=="
}) })
Observable<TokenEnhancer> login(@FieldMap Map<String, String> fields); Observable<TokenEnhancer> login(@FieldMap Map<String, String> fields);

21
app/src/main/java/com/kanglai/push/ui/adapter/MessageSwipeableRecyclerAdapter.java

@ -233,6 +233,20 @@ public class MessageSwipeableRecyclerAdapter extends RecyclerView.Adapter<Messag
return this; return this;
} }
public MessageSwipeableRecyclerAdapter loadMore(Collection<LocalPushChatMsg> collection) {
mItemList.addAll(collection);
notifyDataSetChanged();
return this;
}
public MessageSwipeableRecyclerAdapter insert(Collection<LocalPushChatMsg> collection) {
mItemList.addAll(0, collection);
notifyItemRangeInserted(0, collection.size());
return this;
}
/**左滑*/ /**左滑*/
private static class SwipeLeftResultAction extends SwipeResultActionMoveToSwipedDirection { private static class SwipeLeftResultAction extends SwipeResultActionMoveToSwipedDirection {
private MessageSwipeableRecyclerAdapter mMessageSwipeableRecyclerAdapter; private MessageSwipeableRecyclerAdapter mMessageSwipeableRecyclerAdapter;
@ -297,10 +311,5 @@ public class MessageSwipeableRecyclerAdapter extends RecyclerView.Adapter<Messag
} }
} }
/** 销毁数据 */
public MessageSwipeableRecyclerAdapter clear(){
mItemList.clear();
notifyDataSetChanged();
return this;
}
} }

24
app/src/main/java/com/kanglai/push/ui/fragment/MessageFragment.java

@ -24,9 +24,7 @@ import com.dolphin.core.base.BaseFragment;
import com.dolphin.core.bus.RxBus; import com.dolphin.core.bus.RxBus;
import com.dolphin.core.bus.RxSubscriptions; import com.dolphin.core.bus.RxSubscriptions;
import com.dolphin.core.util.RxUtil; import com.dolphin.core.util.RxUtil;
import com.dolphin.core.util.ToastUtil;
import com.dolphin.umeng.entity.PushChatMessage; import com.dolphin.umeng.entity.PushChatMessage;
import com.google.gson.Gson;
import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator; import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator;
import com.h6ah4i.android.widget.advrecyclerview.animator.SwipeDismissItemAnimator; import com.h6ah4i.android.widget.advrecyclerview.animator.SwipeDismissItemAnimator;
import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager; import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager;
@ -39,7 +37,7 @@ import com.kanglai.push.entity.LocalPushChatMsg;
import com.kanglai.push.ui.activity.InstantActivity; import com.kanglai.push.ui.activity.InstantActivity;
import com.kanglai.push.ui.adapter.MessageSwipeableRecyclerAdapter; import com.kanglai.push.ui.adapter.MessageSwipeableRecyclerAdapter;
import com.kanglai.push.ui.vm.MessageViewModel; import com.kanglai.push.ui.vm.MessageViewModel;
import com.kanglai.push.util.LocalPushChatMsgUtil; import com.kanglai.push.util.HistoryMsgUtil;
import com.scwang.smart.refresh.layout.api.RefreshLayout; import com.scwang.smart.refresh.layout.api.RefreshLayout;
import java.util.ArrayList; import java.util.ArrayList;
@ -87,7 +85,7 @@ public class MessageFragment extends BaseFragment<FragmentMessageBinding, Messag
.subscribe(msg -> { .subscribe(msg -> {
PushChatMessage pushChatMessage = (PushChatMessage) msg; PushChatMessage pushChatMessage = (PushChatMessage) msg;
if(!TextUtils.isEmpty(pushChatMessage.getFanUserId())) { if(!TextUtils.isEmpty(pushChatMessage.getFanUserId())) {
mViewModel.judgeNewPushMsgs(pushChatMessage.getFanUserId(), pushChatMessage.getText()); mViewModel.addLocalHistoryMsg(pushChatMessage.getFanUserId(), pushChatMessage.getText());
} }
}); });
RxSubscriptions.add(mSubscription); RxSubscriptions.add(mSubscription);
@ -108,7 +106,7 @@ public class MessageFragment extends BaseFragment<FragmentMessageBinding, Messag
} }
}, result -> { }, result -> {
if (result !=null) { if (result !=null) {
mViewModel.judgeNewPushMsgs(result.getId(), result.getLastContent()); mViewModel.addLocalHistoryMsg(result.getId(), result.getLastContent());
} }
}); });
} }
@ -147,24 +145,19 @@ public class MessageFragment extends BaseFragment<FragmentMessageBinding, Messag
mRefreshLayout.setEnableLoadMore(false); mRefreshLayout.setEnableLoadMore(false);
mLoadingLayout.showContent(); mLoadingLayout.showContent();
mRefreshLayout.autoRefresh(); mRefreshLayout.autoRefresh();
mRefreshLayout.setOnRefreshListener(mViewModel::refresh);
} }
@Override @Override
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
mViewModel.setAlias(); mViewModel.setAlias();
if (mRefreshLayout != null){
mRefreshLayout.resetNoMoreData();
mRefreshLayout.setOnRefreshListener(mViewModel::refresh);
}
} }
@Override @Override
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
// 销毁
RxSubscriptions.remove(mSubscription); RxSubscriptions.remove(mSubscription);
if (mAdapter != null) mAdapter.clear();
} }
@Override @Override
@ -199,15 +192,10 @@ public class MessageFragment extends BaseFragment<FragmentMessageBinding, Messag
@Override @Override
public void setToRemove(LocalPushChatMsg item) { public void setToRemove(LocalPushChatMsg item) {
LocalPushChatMsgUtil.clearAppointData(item.getId()); HistoryMsgUtil.del(item.getId());
mViewModel.refresh(mRefreshLayout); mViewModel.refresh(mRefreshLayout);
} }
@Override @Override
public void setToRead(int position) { public void setToRead(int position) {}
List<LocalPushChatMsg> list = mAdapter.getData();
list.get(position).setIsRead("0");
list.get(position).setPinned(false);
LocalPushChatMsgUtil.updateLocalData((ArrayList<LocalPushChatMsg>) list);
}
} }

6
app/src/main/java/com/kanglai/push/ui/vm/FocusDetailViewModel.java

@ -26,7 +26,7 @@ import com.kanglai.push.entity.PushType;
import com.kanglai.push.service.LinkService; import com.kanglai.push.service.LinkService;
import com.kanglai.push.ui.activity.FocusDetailActivity; import com.kanglai.push.ui.activity.FocusDetailActivity;
import com.kanglai.push.ui.activity.InstantActivity; import com.kanglai.push.ui.activity.InstantActivity;
import com.kanglai.push.util.LocalPushChatMsgUtil; import com.kanglai.push.util.HistoryMsgUtil;
import com.kongzue.dialogx.DialogX; import com.kongzue.dialogx.DialogX;
import com.kongzue.dialogx.dialogs.BottomMenu; import com.kongzue.dialogx.dialogs.BottomMenu;
import com.kongzue.dialogx.dialogs.MessageDialog; import com.kongzue.dialogx.dialogs.MessageDialog;
@ -124,7 +124,7 @@ public class FocusDetailViewModel extends ToolbarViewModel<FocusDetailActivity>
@Override @Override
public void onNext(ResultResponse R) { public void onNext(ResultResponse R) {
if (R.getCode() == R.SUCCESS) { if (R.getCode() == R.SUCCESS) {
LocalPushChatMsgUtil.clearAppointData(followFans.getConcernUserId()); HistoryMsgUtil.del(followFans.getConcernUserId());
finish(); finish();
ToastUtil.showBottomSuccess("操作成功"); ToastUtil.showBottomSuccess("操作成功");
}else ToastUtil.showBottomWarn(R.getMsg()); }else ToastUtil.showBottomWarn(R.getMsg());
@ -159,7 +159,7 @@ public class FocusDetailViewModel extends ToolbarViewModel<FocusDetailActivity>
@Override @Override
public void onNext(ResultResponse R) { public void onNext(ResultResponse R) {
if (R.getCode() == R.SUCCESS) { if (R.getCode() == R.SUCCESS) {
LocalPushChatMsgUtil.clearAppointData(followFans.getConcernUserId()); HistoryMsgUtil.del(followFans.getConcernUserId());
finish(); finish();
ToastUtil.showBottomSuccess("操作成功"); ToastUtil.showBottomSuccess("操作成功");
}else ToastUtil.showBottomWarn(R.getMsg()); }else ToastUtil.showBottomWarn(R.getMsg());

5
app/src/main/java/com/kanglai/push/ui/vm/FocusListViewModel.java

@ -2,7 +2,6 @@ package com.kanglai.push.ui.vm;
import android.app.Application; import android.app.Application;
import android.text.Editable; import android.text.Editable;
import android.text.TextUtils;
import android.util.Pair; import android.util.Pair;
import android.view.View; import android.view.View;
import android.widget.Filter; import android.widget.Filter;
@ -23,7 +22,7 @@ import com.kanglai.push.entity.ConcernFan;
import com.kanglai.push.entity.User; import com.kanglai.push.entity.User;
import com.kanglai.push.service.LinkService; import com.kanglai.push.service.LinkService;
import com.kanglai.push.ui.activity.FocusListActivity; import com.kanglai.push.ui.activity.FocusListActivity;
import com.kanglai.push.util.LocalPushChatMsgUtil; import com.kanglai.push.util.HistoryMsgUtil;
import com.kongzue.dialogx.dialogs.FullScreenDialog; import com.kongzue.dialogx.dialogs.FullScreenDialog;
import java.util.List; import java.util.List;
@ -117,7 +116,7 @@ public class FocusListViewModel extends ToolbarViewModel<FocusListActivity> {
if (R.getCode() == R.SUCCESS) { if (R.getCode() == R.SUCCESS) {
ToastUtil.showBottomSuccess("操作成功"); ToastUtil.showBottomSuccess("操作成功");
loadFocusList(); // 刷新数据 loadFocusList(); // 刷新数据
LocalPushChatMsgUtil.clearAppointData(item.getFanUserId()); HistoryMsgUtil.del(item.getFanUserId());
}else ToastUtil.showBottomWarn(R.getMsg()); }else ToastUtil.showBottomWarn(R.getMsg());
} }

5
app/src/main/java/com/kanglai/push/ui/vm/InstantViewModel.java

@ -29,10 +29,8 @@ import com.kanglai.push.entity.PushChatMessage;
import com.kanglai.push.entity.User; import com.kanglai.push.entity.User;
import com.kanglai.push.service.PushService; import com.kanglai.push.service.PushService;
import com.kanglai.push.ui.activity.InstantActivity; import com.kanglai.push.ui.activity.InstantActivity;
import com.kanglai.push.util.LocalPushChatMsgUtil;
import com.scwang.smart.refresh.layout.api.RefreshLayout; import com.scwang.smart.refresh.layout.api.RefreshLayout;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
@ -57,8 +55,6 @@ public class InstantViewModel extends ToolbarViewModel<InstantActivity>{
public String cursor = ""; public String cursor = "";
public ArrayList<LocalPushChatMsg> localPushChatMsgs; // 本地缓存的列表数据
public InstantViewModel(@NonNull Application application) { public InstantViewModel(@NonNull Application application) {
super(application); super(application);
DaggerServiceComponent DaggerServiceComponent
@ -71,7 +67,6 @@ public class InstantViewModel extends ToolbarViewModel<InstantActivity>{
public void onCreate(@NonNull LifecycleOwner owner) { public void onCreate(@NonNull LifecycleOwner owner) {
super.onCreate(owner); super.onCreate(owner);
super.setRightIconVisible(View.VISIBLE); super.setRightIconVisible(View.VISIBLE);
localPushChatMsgs = LocalPushChatMsgUtil.getLocalData();
} }
@Override @Override
protected void rightIconOnClick() { protected void rightIconOnClick() {

6
app/src/main/java/com/kanglai/push/ui/vm/LinkDetailViewModel.java

@ -28,7 +28,7 @@ import com.kanglai.push.entity.User;
import com.kanglai.push.service.LinkService; import com.kanglai.push.service.LinkService;
import com.kanglai.push.ui.activity.InstantActivity; import com.kanglai.push.ui.activity.InstantActivity;
import com.kanglai.push.ui.activity.LinkDetailActivity; import com.kanglai.push.ui.activity.LinkDetailActivity;
import com.kanglai.push.util.LocalPushChatMsgUtil; import com.kanglai.push.util.HistoryMsgUtil;
import com.kongzue.dialogx.DialogX; import com.kongzue.dialogx.DialogX;
import com.kongzue.dialogx.dialogs.BottomMenu; import com.kongzue.dialogx.dialogs.BottomMenu;
import com.kongzue.dialogx.dialogs.MessageDialog; import com.kongzue.dialogx.dialogs.MessageDialog;
@ -135,7 +135,7 @@ public class LinkDetailViewModel extends ToolbarViewModel<LinkDetailActivity> {
@Override @Override
public void onNext(ResultResponse R) { public void onNext(ResultResponse R) {
if (R.getCode() == R.SUCCESS) { if (R.getCode() == R.SUCCESS) {
LocalPushChatMsgUtil.clearAppointData(concernFan.getFanUserId()); HistoryMsgUtil.del(concernFan.getFanUserId());
finish(); finish();
ToastUtil.showBottomSuccess("操作成功"); ToastUtil.showBottomSuccess("操作成功");
}else ToastUtil.showBottomWarn(R.getMsg()); }else ToastUtil.showBottomWarn(R.getMsg());
@ -166,7 +166,7 @@ public class LinkDetailViewModel extends ToolbarViewModel<LinkDetailActivity> {
if (R.getCode() == R.SUCCESS) { if (R.getCode() == R.SUCCESS) {
ToastUtil.showBottomSuccess("操作成功"); ToastUtil.showBottomSuccess("操作成功");
/*清除缓存的聊天记录*/ /*清除缓存的聊天记录*/
LocalPushChatMsgUtil.clearAppointData(concernFan.getFanUserId()); HistoryMsgUtil.del(concernFan.getFanUserId());
finish(); finish();
}else ToastUtil.showBottomWarn(R.getMsg()); }else ToastUtil.showBottomWarn(R.getMsg());
} }

154
app/src/main/java/com/kanglai/push/ui/vm/MessageViewModel.java

@ -1,40 +1,35 @@
package com.kanglai.push.ui.vm; package com.kanglai.push.ui.vm;
import android.app.Application; import android.app.Application;
import android.text.TextUtils;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import com.blankj.utilcode.util.ArrayUtils;
import com.blankj.utilcode.util.CacheDiskUtils; import com.blankj.utilcode.util.CacheDiskUtils;
import com.blankj.utilcode.util.CollectionUtils;
import com.blankj.utilcode.util.LogUtils; import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.Utils; import com.blankj.utilcode.util.Utils;
import com.dolphin.core.http.api.ResultResponse; import com.dolphin.core.http.api.ResultResponse;
import com.dolphin.core.http.exception.ExceptionHandle; import com.dolphin.core.http.exception.ExceptionHandle;
import com.dolphin.core.util.RxUtil; import com.dolphin.core.util.RxUtil;
import com.dolphin.core.util.ToastUtil; import com.dolphin.core.util.ToastUtil;
import com.google.gson.Gson;
import com.kanglai.push.app.AppApplication; import com.kanglai.push.app.AppApplication;
import com.kanglai.push.constant.CacheConstant; import com.kanglai.push.constant.CacheConstant;
import com.kanglai.push.constant.CommonConstant; import com.kanglai.push.constant.CommonConstant;
import com.kanglai.push.di.component.DaggerServiceComponent; import com.kanglai.push.di.component.DaggerServiceComponent;
import com.kanglai.push.entity.LocalPushChatMsg; import com.kanglai.push.entity.LocalPushChatMsg;
import com.kanglai.push.entity.PushMessage;
import com.kanglai.push.entity.ResultVo; import com.kanglai.push.entity.ResultVo;
import com.kanglai.push.entity.SystemUser; import com.kanglai.push.entity.SystemUser;
import com.kanglai.push.entity.User; import com.kanglai.push.entity.User;
import com.kanglai.push.service.PushService; import com.kanglai.push.service.PushService;
import com.kanglai.push.ui.fragment.MessageFragment; import com.kanglai.push.ui.fragment.MessageFragment;
import com.kanglai.push.util.LocalPushChatMsgUtil; import com.kanglai.push.util.HistoryMsgUtil;
import com.kanglai.push.util.TimeFormatUtil; import com.kanglai.push.util.TimeFormatUtil;
import com.scwang.smart.refresh.layout.api.RefreshLayout; import com.scwang.smart.refresh.layout.api.RefreshLayout;
import com.umeng.message.PushAgent; import com.umeng.message.PushAgent;
import com.umeng.message.api.UPushRegisterCallback;
import java.util.ArrayList; import java.util.Map;
import java.util.List;
import java.util.OptionalInt;
import java.util.stream.IntStream;
import javax.inject.Inject; import javax.inject.Inject;
@ -53,8 +48,6 @@ public class MessageViewModel extends ToolbarViewModel<MessageFragment> {
@Inject @Inject
PushService pushService; PushService pushService;
private PushMessage pushMessage = new PushMessage();
private User user = CacheDiskUtils.getInstance().getParcelable(CacheConstant.USER_INFO, User.CREATOR, new User()); private User user = CacheDiskUtils.getInstance().getParcelable(CacheConstant.USER_INFO, User.CREATOR, new User());
@ -73,118 +66,56 @@ public class MessageViewModel extends ToolbarViewModel<MessageFragment> {
super.onCreate(owner); super.onCreate(owner);
} }
/**
* 刷新布局直接刷新本地缓存数据
* @param refresh
*/
public void refresh(RefreshLayout refresh) { public void refresh(RefreshLayout refresh) {
List<LocalPushChatMsg> localData = LocalPushChatMsgUtil.getLocalData(); Map<String, LocalPushChatMsg> localHistoryMsg = HistoryMsgUtil.select();
if (!CollectionUtils.isEmpty(localData)) { if (localHistoryMsg != null) {
mActivity.mAdapter.refresh(localData); mActivity.mAdapter.refresh(localHistoryMsg.values());
mActivity.mLoadingLayout.showContent(); mActivity.mLoadingLayout.showContent();
if (mActivity.mAdapter.getItemCount() < localData.size()) { // 全部数据加载完之后停止加载 } else {
refresh.finishRefresh();
} else refresh.finishRefreshWithNoMoreData(); // 完成刷新并且标记没有更多的数据
}else {
/*未发现缓存数据*/
mActivity.mLoadingLayout.showEmpty(); mActivity.mLoadingLayout.showEmpty();
refresh.finishRefresh(true); refresh.finishRefresh();
} }
} }
/**
* 判断是否为新的用户消息
* @param fanUserId
* @param lastContent
*/
public void judgeNewPushMsgs(String fanUserId, String lastContent){
ArrayList<LocalPushChatMsg> data = LocalPushChatMsgUtil.getLocalData();
if (data != null && !CollectionUtils.isEmpty(data)) {
// Optional 适用于任何引用类型的空值判断和处理。而 OptionalInt 只适用于基本类型 int 的空值判断和处理
// !TextUtils.isEmpty(i.getId()) 来确保只处理 id 不为空的实体对象 避免空对象报错
OptionalInt indexOptional = IntStream.range(0,data.size())
.filter(i -> !TextUtils.isEmpty(data.get(i).getId()) && fanUserId.equals(data.get(i).getId()))
.findFirst();
if (indexOptional.isPresent()){ // Optional.isPresent() 方法用于检查 Optional对象是否包含非空的实体对象 - 即实体类数组中已有对应用户(修改)
LocalPushChatMsg sameMsg = data.get(indexOptional.getAsInt());
sameMsg.setSendTime(TimeFormatUtil.getCurrentTime());
sameMsg.setLastContent(lastContent);
sameMsg.setIsRead("1"); // 设置为未读
data.remove(indexOptional.getAsInt()); // 删除重复的内容
data.add(0, sameMsg); // 更新为最新的数据
LocalPushChatMsgUtil.updateLocalData(data);
mActivity.mAdapter.refresh(data); // 更新界面ui
mActivity.mLoadingLayout.showContent();
}else newLocalCache(fanUserId, lastContent); /*列表不为空 但 目标用户为新用户*/
}else newLocalCache(fanUserId, lastContent); /*列表为空 直接新增数组*/
}
/** public void addLocalHistoryMsg(String userId, String content) {
* 检测到目标用户没有本地缓存 pushService.getUserById(userId)
* @param fanUserId .compose(RxUtil.schedulersTransformer())
* @param lastContent .compose(RxUtil.exceptionTransformer())
*/ .doOnSubscribe(this)
public void newLocalCache(String fanUserId, String lastContent) { .subscribe(new DisposableObserver<ResultResponse<ResultVo<SystemUser>>>() {
pushService.getUserById(fanUserId) @Override
.compose(RxUtil.schedulersTransformer()) public void onNext(ResultResponse<ResultVo<SystemUser>> R) {
.compose(RxUtil.exceptionTransformer()) if (R.getCode() == R.SUCCESS) {
.doOnSubscribe(this) if (R.getData().getResult() != null) {
.subscribe(new DisposableObserver<ResultResponse<ResultVo<SystemUser>>>() { SystemUser systemUser = R.getData().getResult();
@Override LocalPushChatMsg newMsg = new LocalPushChatMsg(userId, systemUser.getAvatar(), systemUser.getNickName(), systemUser.getUserType(), "0");
public void onNext(ResultResponse<ResultVo<SystemUser>> R) { newMsg.setLastContent(content);
if (R.getCode() == R.SUCCESS) { newMsg.setSendTime(TimeFormatUtil.getCurrentTime());
if (R.getData().getResult() != null) { HistoryMsgUtil.put(userId, newMsg);
SystemUser systemUser = R.getData().getResult(); mActivity.mAdapter.insert(ArrayUtils.asArrayList(newMsg));
LocalPushChatMsg newMsg = new LocalPushChatMsg(fanUserId, systemUser.getAvatar(), systemUser.getNickName(), systemUser.getUserType(), "1"); }else ToastUtil.showBottom("用户不存在");
newMsg.setLastContent(lastContent); }else ToastUtil.showBottom(R.getMsg());
newMsg.setSendTime(TimeFormatUtil.getCurrentTime()); }
/** 将数据更新到缓存*/ @Override
ArrayList<LocalPushChatMsg> data = LocalPushChatMsgUtil.getLocalData(); public void onError(Throwable e) {
if(CollectionUtils.isEmpty(data)) data = new ArrayList<>(); /*当数据本地存储数据为空时 需要将数据实例化*/ ExceptionHandle.baseExceptionMsg(e);
data.add(0, newMsg); }
LocalPushChatMsgUtil.updateLocalData(data);
}else ToastUtil.showBottom("用户不存在"); @Override
}else ToastUtil.showBottom(R.getMsg()); public void onComplete() {
} if (mActivity.mAdapter.getItemCount() > 0) {
mActivity.mLoadingLayout.showContent();
@Override } else mActivity.mLoadingLayout.showEmpty();
public void onError(Throwable e) { }
ExceptionHandle.baseExceptionMsg(e); });
}
@Override
public void onComplete() {
/** 数据更新完之后 更新UI*/
ArrayList<LocalPushChatMsg> newList = LocalPushChatMsgUtil.getLocalData();
if (CollectionUtils.isEmpty(newList)){
mActivity.mLoadingLayout.showEmpty();
mActivity.mRefreshLayout.finishRefresh(true);
ToastUtil.showBottom("暂无聊天记录");
}else {
mActivity.mAdapter.refresh(newList);
mActivity.mLoadingLayout.showContent();
}
}
});
} }
public void setAlias(){ public void setAlias(){
PushAgent mPushAgent = PushAgent.getInstance(Utils.getApp()); PushAgent mPushAgent = PushAgent.getInstance(Utils.getApp());
mPushAgent.register(new UPushRegisterCallback() { // 设备注册
@Override
public void onSuccess(String s) {
LogUtils.i( "device token: " + s);
}
@Override
public void onFailure(String s, String s1) {
LogUtils.i("register failed: " + s + " " + s1);
}
});
mPushAgent.setAlias(user.getId(), CommonConstant.UMENG_PUSH_USER_ALIAS_TYPE, (s, m)->{ mPushAgent.setAlias(user.getId(), CommonConstant.UMENG_PUSH_USER_ALIAS_TYPE, (s, m)->{
String bindMsg; String bindMsg;
if (s) { if (s) {
@ -195,4 +126,5 @@ public class MessageViewModel extends ToolbarViewModel<MessageFragment> {
LogUtils.d(bindMsg); LogUtils.d(bindMsg);
}); });
} }
} }

47
app/src/main/java/com/kanglai/push/util/HistoryMsgUtil.java

@ -0,0 +1,47 @@
package com.kanglai.push.util;
import com.blankj.utilcode.util.CacheDiskUtils;
import com.blankj.utilcode.util.MapUtils;
import com.google.gson.Gson;
import com.kanglai.push.constant.CacheConstant;
import com.kanglai.push.entity.LocalPushChatMsg;
import com.kanglai.push.entity.User;
import java.util.Map;
import java.util.Objects;
import lombok.experimental.UtilityClass;
@UtilityClass
public class HistoryMsgUtil {
private User user = CacheDiskUtils.getInstance().getParcelable(CacheConstant.USER_INFO, User.CREATOR, new User());
public Map<String, LocalPushChatMsg> select() {
String localHistoryMsgJson = CacheDiskUtils.getInstance().getString(user.getId().concat(user.getUserType()) ,"");
return (Map<String, LocalPushChatMsg>) new Gson().fromJson(localHistoryMsgJson, Map.class);
}
public void put(String key,LocalPushChatMsg value) {
Objects.requireNonNull(key);
String localHistoryMsgJson = CacheDiskUtils.getInstance().getString(user.getId().concat(user.getUserType()) ,"");
Map<String, LocalPushChatMsg> localHistoryMsg = Objects.requireNonNullElse((Map<String, LocalPushChatMsg>) new Gson().fromJson(localHistoryMsgJson, Map.class), MapUtils.newHashMap());
localHistoryMsg.put(key, value);
String newLocalHistoryMsgJson = new Gson().toJson(localHistoryMsg);
CacheDiskUtils.getInstance().put(user.getId().concat(user.getUserType()), newLocalHistoryMsgJson);
}
public void del(String key){
Objects.requireNonNull(key);
String localHistoryMsgJson = CacheDiskUtils.getInstance().getString(user.getId().concat(user.getUserType()) ,"");
Map<String, LocalPushChatMsg> localHistoryMsg = Objects.requireNonNullElse((Map<String, LocalPushChatMsg>) new Gson().fromJson(localHistoryMsgJson, Map.class), MapUtils.newHashMap());
localHistoryMsg.remove(key);
String newLocalHistoryMsgJson = new Gson().toJson(localHistoryMsg);
CacheDiskUtils.getInstance().put(user.getId().concat(user.getUserType()), newLocalHistoryMsgJson);
}
public void clean() {
CacheDiskUtils.getInstance().remove(user.getId().concat(user.getUserType()));
}
}

117
app/src/main/java/com/kanglai/push/util/LocalPushChatMsgUtil.java

@ -1,117 +0,0 @@
package com.kanglai.push.util;
import android.text.TextUtils;
import com.blankj.utilcode.util.CacheDiskUtils;
import com.blankj.utilcode.util.CollectionUtils;
import com.blankj.utilcode.util.LogUtils;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.kanglai.push.constant.CacheConstant;
import com.kanglai.push.entity.LocalPushChatMsg;
import com.kanglai.push.entity.User;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 本地聊天数据缓存工具类
*
* 本地聊天记录缓存方式
* CacheDiskUtils.getInstance().getString(user.getId()+"_MESSAGE_STORAGE",""); -获取
* CacheDiskUtils.getInstance().put(user.getId()+"_MESSAGE_STORAGE", newArr); -存储
*
* @Author: liusixiang007
* @since: 2023/6/26
*/
public class LocalPushChatMsgUtil {
/**
* 获取本地缓存ArrayList
* 并进行自检 id 是否为空
* @return
*/
public static ArrayList<LocalPushChatMsg> getLocalData() {
ArrayList<LocalPushChatMsg> data = new ArrayList<>();
User user = CacheDiskUtils.getInstance().getParcelable(CacheConstant.USER_INFO, User.CREATOR, new User());
Type listType = new TypeToken<List<LocalPushChatMsg>>(){}.getType(); // 定义接收结果类型
String cachedJsonArrayStr = CacheDiskUtils.getInstance().getString(user.getId()+"_MESSAGE_STORAGE","");
data = (ArrayList<LocalPushChatMsg>) new Gson().fromJson(cachedJsonArrayStr, listType);
if (data != null && !CollectionUtils.isEmpty(data)) {
Iterator<LocalPushChatMsg> iterator = data.iterator(); // 自检 使用迭代器的remove来删除
while (iterator.hasNext()){
LocalPushChatMsg item = iterator.next();
if (item.getId() == null || TextUtils.isEmpty(item.getId())) {
iterator.remove();
}
}
}
return data;
}
/**
* 清除指定用户的缓存数据添加之前需要限制id不能为空
* @param id
*/
public static void clearAppointData(String id){
ArrayList<LocalPushChatMsg> data = getLocalData();
if (data != null && !CollectionUtils.isEmpty(data)) {
Iterator<LocalPushChatMsg> iterator = data.iterator();
while (iterator.hasNext()){
LocalPushChatMsg item = iterator.next();
/*获取的时候已经做过自检了 这里就不需要做非空判断了*/
if (id.equals(item.getId())) {
iterator.remove();
updateLocalData(data);
}
}
}
}
/**
* 更新用户缓存数据
* @param data
*/
public static void updateLocalData(ArrayList<LocalPushChatMsg> data) {
User user = CacheDiskUtils.getInstance().getParcelable(CacheConstant.USER_INFO, User.CREATOR, new User());
String newArr = new Gson().toJson(data);
CacheDiskUtils.getInstance().put(user.getId()+"_MESSAGE_STORAGE", newArr);
LogUtils.i(user.getNickName()+"_MESSAGE_STORAGE 的缓存数据已更新");
}
/**
* 储存最新的一条数据
* @param newDate
*/
public static void addNewLocalData(LocalPushChatMsg newDate){
User user = CacheDiskUtils.getInstance().getParcelable(CacheConstant.USER_INFO, User.CREATOR, new User());
ArrayList<LocalPushChatMsg> data = new ArrayList<>();
data.add(newDate);
LogUtils.d(data);
String newArr = new Gson().toJson(data);
CacheDiskUtils.getInstance().put(user.getId()+"_MESSAGE_STORAGE", newArr);
LogUtils.i(user.getNickName()+"_MESSAGE_STORAGE 的缓存数据已更新");
}
/**
* 遍历本地存储列表 出现相同id就删除旧数据 插入新的 没有就直接插入
*
*
* @param newData 新的单条数据
* @param oldList 老的存储数据列表(使用之前确保该列表不为空)
*/
public static void updateLocalDatas(LocalPushChatMsg newData, ArrayList<LocalPushChatMsg> oldList) {
User user = CacheDiskUtils.getInstance().getParcelable(CacheConstant.USER_INFO, User.CREATOR, new User());
Iterator<LocalPushChatMsg> iterator = oldList.iterator();
while (iterator.hasNext()){
LocalPushChatMsg item = iterator.next();
if (newData.getId().equals(item.getId())) iterator.remove();
}
if (CollectionUtils.isEmpty(oldList)) oldList = new ArrayList<>(); // 防止数据为空时数据插入异常
oldList.add(newData);
CacheDiskUtils.getInstance().put(user.getId()+"_MESSAGE_STORAGE", oldList);
LogUtils.i(user.getNickName()+"_MESSAGE_STORAGE 的缓存数据已更新--",oldList);
}
}
Loading…
Cancel
Save