注册

Android 会话列表无数据问题

很奇怪的问题,APP正常情况下都可以获取会话列表,但是,只要过几天后再打开APP时,会话列表记录就是为空?
实测过程中,过了几天后运行APP打了断点,确没有走setUserProfileProvider这个方法,不知道这是什么原因?是因为环信登录会话时间过期了吗?可是调用ChatClient.getInstance().isLoggedInBefore()返回为true。
 
已邀请:

lizg - ……

setUserProfileProvider 是用来设置用户信息的 这个与会话列表记录没有什么直接关系
APP的会话消息都是存本地数据库的 如果本地的数据被清除调 那么你登录后就无法获取到对应的数据
如果你有root过的手机 可以查看数据库是否还有数据的存在 客户端本地数据库的路径:/data/data/包名/file/easemobDB  如果有数据没调API没获取到 那就是没有把数据存数据库加载到缓存中  SDK提供的API都是从缓存中加载的EMClient.getInstance().chatManager().loadAllConversations() 这个方法就是把数据加载到缓存中
如果数据库里面没有数据了 可能是之前的某些操作清除了数据  比如卸载应用或者用一些软件清理手机垃圾都有可能清空数据库

mv

非常感谢您的回答,我看了下本地数据库是有数据的,但是从环信SDK的打印日志来看conversation size 0,这说明什么问题呢?

lizg - ……

说明没有把数据库的数据加载到缓存里面  android这边都是在缓存上获取 不是直接从数据库拿  EMClient.getInstance().chatManager().loadAllConversations()  这个方法就是去把数据库的消息加载到缓存上

mv

好的,那EMClient.getInstance().chatManager().loadAllConversations()这个方法是如何把我本地的数据加载到缓存中的呢?因为我是在本地单独创建的数据库及相关需要用到的数据表。

lizg - ……

EMClient.getInstance().chatManager().loadAllConversations() 是从我们自己的数据库加载,和你自己本地单独创建的一点关系都没有 你自己创建的数据库怎么获取数据你自己应该知道才对 这已经不是去调SDK提供的API了 你不得自己去写方法调取?SDK怎么可能去调用你自己本地创建的数据库

mv

好的,明白了,按照您说的是从你们自己的数据库加载了,那么环信这边是在哪个步骤把会话数据存入到你们自己数据库中的呢?对应存入数据的方法是哪个?

lizg - ……

环信接收消息时 SDK内部会自动对消息进行本地存储   savemessage insertMessage 都能插入
http://sdkdocs.easemob.com/apidoc/android/chat3.0/classcom_1_1hyphenate_1_1chat_1_1_e_m_conversation.html#a18e37861ae13ec85c881c267611e90fd   可以参考文档

要回复问题请先登录注册