• Kotlin高仿微信-第55篇-同步数据


      Kotlin高仿微信-项目实践58篇详细讲解了各个功能点,包括:注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。

    Kotlin高仿微信-项目实践58篇,点击查看详情

    效果图:后台同步数据,没有效果图

    实现代码:

    /**
     * Author : wangning
     * Email : maoning20080809@163.com
     * Date : 2022/6/27 14:41
     * Description : 同步信息
     */
    object SyncRepository {
    
        //第一次安装、或者卸载后安装,同步服务器信息
        fun syncFirst (account : String, packageName : String, iCommonCallback: ICommonCallback) {
            var isFirstLogin = DataStoreUtils.get(DataStoreParams.User.DS_IS_FIRST_LOGIN, true) as Boolean
            //首次安装
            if(!isFirstLogin){
                return
            }
            CoroutineScope(Dispatchers.IO).launch {
                var result = ApiResult.create {SyncService.getApi().syncFirst(account, packageName)}
                if(result.isSuccess){
                    var data = result.data
                    var syncFirstBean = Gson().fromJson(data, SyncFirstBean::class.java)
                    syncFirstBean?.let {
                        processBaseSystem(it.sync_base_system)
                        processUserList(it.sync_user)
                        processContactsList(it.sync_contacts)
                        processChatList(it.sync_chat)
                        processVipBean(it.sync_vip)
                        //如果同步成功,设置登陆标识符
                        DataStoreUtils.put(DataStoreParams.User.DS_IS_FIRST_LOGIN, false)
                    }
                    iCommonCallback?.onSuccess(0)
                } else {
                    iCommonCallback?.onFailure(0)
                }
            }
        }
    
        //每次进入主页面,要查询服务器重要数据
        fun syncEnterMain(account: String){
            syncVip(account)
        }
    
        //获取服务器vip信息
        fun syncVip(account: String){
            if(TextUtils.isEmpty(account)){
                return
            }
            CoroutineScope(Dispatchers.IO).launch {
                var vipBean = VipManagerRepository.getVipLocal(account)
                if(vipBean != null && CommonUtils.Vip.isVip(vipBean)){
                    //如果还是vip,不需要加载。
                    return@launch
                }
                var result = VipManagerRepository.getVipServer(account)
                if(result.isSuccess){
                    var vipBean = Gson().fromJson(result.data, VipBean::class.java)
                    VipManagerRepository.insertVipLocal(vipBean)
                }
            }
        }
    
        /**
         * 同步系统基本信息
         */
        private fun processBaseSystem(baseSystemBean: BaseSystemBean){
            baseSystemBean?.let {
                BaseSystemRepository.insertBaseSystem(it)
            }
        }
    
        /**
         * 同步vip信息
         */
        private fun processVipBean(vipBean: VipBean){
            vipBean?.let {
                VipManagerRepository.insertVipLocal(vipBean)
            }
        }
    
        /**
         * 同步账户信息
         */
        private fun processUserList(userListServer : ArrayList){
            userListServer?.let {
                UserRepository.syncUserFirst(it)
            }
        }
    
        /**
         * 同步聊天信息
         */
        private fun processChatList(userListServer : ArrayList){
            userListServer?.let {
                ChatRepository.syncInsertChatListLocal(it)
            }
        }
    
        /**
         * 同步联系人
         */
        private fun processContactsList(contactsListServer : ArrayList){
            contactsListServer?.let {
                ContactsRepository.syncInsertContactsListLocal(it)
            }
        }
    
    }

  • 相关阅读:
    2023中秋活动征文获奖名单已公布
    X86_64函数调用汇编程序分析
    判断时间范围是否重叠(原理)
    【老生谈算法】matlab实现控制系统稳定性——控制系统
    7、Copmose自定义颜色和主题切换
    证券行业超融合架构方案设计
    在集群模式下,Redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?
    接口测试工具Postman使用实践
    Java基础教学 日期类Api导学
    用CNN+RNN实现image-to-text任务:原理讲解和代码实现
  • 原文地址:https://blog.csdn.net/maoning20080808/article/details/128133757