Android xmpp协议

coder_cp 2014-04-03 03:44:02
最近在学习基于Android 的xmpp协议的。即时通讯。在这里有一个问题想请教:
我在客户端更换用户之后,好友列表没有发生变化。查看代码是从数据库中取得。聊天记录也是存储在数据库中。

重新更换用户之后,好友列表还是从数据库中获取。而且这个数据库并没有更新。

我想到几种方式:
1.聊天记录肯定是在本地的。但是不同用户的聊天记录是如何区分的?
2.统一在数据库中,但是这样更换用户之后就要更新数据库中的好友数据,代价很大吧.
3.通过接口从openfire直接获取好友列表.

大神们是怎么实现的?



...全文
215 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
passself 2014-04-04
  • 打赏
  • 举报
回复
openfire 只是一个交互式服务器,数据你可以去请求,但是不一定会是新的,本地的记录可以自己写一个数据库,用不通的id来标识不通的好友,qq就是这么做的。
icyblood198999 2014-04-04
  • 打赏
  • 举报
回复
这个解决方法有很多。我只是个人随便想了想,如果有疏漏请更正 1、聊天记录本地数据库和服务器数据库一定都要有。通过字段区分用户就可以。 2、切换用户仅仅只是再初始化一份这个新用户的好友、近天聊天记录等等,这个过程没啥可麻烦的。一个数据库完全可以胜任。 3、获取用户列表有很多种方法,很惭愧没有用过lz所谓的openfire方法。而且像获取好友列表等这种无时效性的请求,完全可以用单次请求解决。
coder_cp 2014-04-04
  • 打赏
  • 举报
回复
木有人回复吗
coder_cp 2014-04-04
  • 打赏
  • 举报
回复
引用 3 楼 OExpress 的回复:
android的xmpp代码实现在那里啊? louzhu
http://blog.csdn.net/way_ping_li/article/details/17403929
icyblood198999 2014-04-04
  • 打赏
  • 举报
回复
当然了,我这些设计想法都是30秒内不负责任的想出来的,肯定有不够优化,不够简洁的地方,解决这种信息同步问题的设计应该有不少,lz可以参考参考。
icyblood198999 2014-04-04
  • 打赏
  • 举报
回复
引用 11 楼 birdfly12345 的回复:
[quote=引用 6 楼 icyblood198999 的回复:] 这个解决方法有很多。我只是个人随便想了想,如果有疏漏请更正 1、聊天记录本地数据库和服务器数据库一定都要有。通过字段区分用户就可以。 2、切换用户仅仅只是再初始化一份这个新用户的好友、近天聊天记录等等,这个过程没啥可麻烦的。一个数据库完全可以胜任。 3、获取用户列表有很多种方法,很惭愧没有用过lz所谓的openfire方法。而且像获取好友列表等这种无时效性的请求,完全可以用单次请求解决。
我想到两种方式,第一种是直接从服务器去获取。这样的话每次登陆都要去获取好友列表。 第二种是在数据表中添加字段,标识用户. 由于首次登陆的时候是数据库表中没有值。 所以要添加一个xml文件标识这个用户的好友是否已经在数据库中。 如果在的话就不用从数据库中获取,如果不在,就从网络获取,然后插入到数据库中。 不知道你推荐哪种?[/quote] 这两种相较而言我肯定推荐后者,但是后者还是不健全。当你切换用户的时候,其实成熟一点的应该会为每个用户的好友列表维护版本号。通过版本来区分你这次切换到A用户,你本地的好友列表和服务器上的是否一致。这个版本单独用一张表来维护便可。这样就免去了你用xml记的麻烦。而且还能优化每次切换用户的初始化流量。因为一旦有版本,就可以确定切换用户到A之前的这段时间,A在服务端添加了几个好友,删除了几个好友。这样只需初始化这几个好友便可。 lz目前的设计还是偏向于死板了,还有就是我想指出lz的一个设计思维的问题,做东西不能以纯实现结果而凑合的思想来做。要合理,而且健全。为了优化用户体验和节省资源,一些必要的工作量增加还是非常必要的。
coder_cp 2014-04-04
  • 打赏
  • 举报
回复
引用 10 楼 truckys 的回复:
分别为每个数据建一个本地数据库。
为每一个用户吗?
coder_cp 2014-04-04
  • 打赏
  • 举报
回复
引用 6 楼 icyblood198999 的回复:
这个解决方法有很多。我只是个人随便想了想,如果有疏漏请更正 1、聊天记录本地数据库和服务器数据库一定都要有。通过字段区分用户就可以。 2、切换用户仅仅只是再初始化一份这个新用户的好友、近天聊天记录等等,这个过程没啥可麻烦的。一个数据库完全可以胜任。 3、获取用户列表有很多种方法,很惭愧没有用过lz所谓的openfire方法。而且像获取好友列表等这种无时效性的请求,完全可以用单次请求解决。
我想到两种方式,第一种是直接从服务器去获取。这样的话每次登陆都要去获取好友列表。 第二种是在数据表中添加字段,标识用户. 由于首次登陆的时候是数据库表中没有值。 所以要添加一个xml文件标识这个用户的好友是否已经在数据库中。 如果在的话就不用从数据库中获取,如果不在,就从网络获取,然后插入到数据库中。 不知道你推荐哪种?
truckys 2014-04-04
  • 打赏
  • 举报
回复
分别为每个数据建一个本地数据库。
coder_cp 2014-04-04
  • 打赏
  • 举报
回复
引用 8 楼 shutong1413 的回复:
楼主,源码能参考否?还有怎么区分聊天记录,与一个人聊天建一个还是怎么滴啊
http://blog.csdn.net/way_ping_li/article/details/17403929
老子十八讲 2014-04-04
  • 打赏
  • 举报
回复
楼主,源码能参考否?还有怎么区分聊天记录,与一个人聊天建一个还是怎么滴啊
CyberLogix 2014-04-03
  • 打赏
  • 举报
回复
android的xmpp代码实现在那里啊? louzhu
coder_cp 2014-04-03
  • 打赏
  • 举报
回复
引用 1 楼 ultrapro 的回复:
每个用户用不同的数据库文件呗,那个文件名可以自己定义啊
怎么做到同步好友的. 比如我换了一个手机,这个时候数据库中是没有数据的 .还要从网络中查询然后更新到数据库中?这边会不会太麻烦了。
儿大不由爷 2014-04-03
  • 打赏
  • 举报
回复
每个用户用不同的数据库文件呗,那个文件名可以自己定义啊

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧