Skip to content

dingdangmao123/weibo2

Repository files navigation

Weico

  • 这是一个简单的Android微博客户端,采用ButterKnife,OKHttp框架

  • Web后台采用 PHP+MySQL,利用Redis构建热门话题,Token缓存等

  • NIO服务器采用Java Netty + Redis消息队列提供消息实时提醒

开发笔记

  • 设计好Json数据协议,利用PHP输出Json数据,没有采用Retrofit之类框架,通过封装Okhttp和Gson传入class对象直接获取Java模型对象(出错也会将错误信息生成SysMsg对象避免传回空指针),Gson泛型的问题,将实体消息封装到inner字段内,通过类继承绕开泛型,先将SysMsg交给BaseActivity,BaseFragment检查处理,确认没有出错则强制转换成子模型,供后续调用。
 public class SysMsg {

     private String code;

     private String msg;
     
   }
  
 public class TitleModel extends SysMsg {

    private LinkedList<inner> inner;
 }
  
  • Token字段登录后存入MySQL,并缓存到Redis,登录后自动刷新,旧的自动废弃。

  • 图片九宫格采用的是自定义ViewGroup,布局算法无非是1张,4张或者3列显示。特别值得一提的是当一张图片时,需要按宽和高比例进行缩放,需要服务器返回图片信息。

  • 由于App可能会被强杀,导致静态变量空值,出现错误,因此不直接访问,结合SP持久化存取

  • 其余主要是一些常规的优化,图片的标签防止错位,缩略图,LRU的缓存等

  • 微博比较有意思的就是@功能,#话题#功能,通过正则表达式匹配来提取信息,生成提醒等批量插入MySQL,提高性能,#话题#功能有起始和终止#号,比较好匹配,而@功能由于没有中止符号较为难办,本项目支持两种:@Java@Scala@Kotlin 或者@Java @Scala @Kotlin 即通过后面的@符号或者空格来界定,不知有无更好的设计。UI通过SpannableString显示和响应点击事件。

  • 本项目没有实现转发微博,特别是针对多人连续转发,本人也考虑了两种方案,一种是每条微博保存被转发的微博id(如果多次转发,只保留最近的一条),显示时只显示对当前和最近的一条微博,这样查询起来比较快。另外一种是数据库冗余设计,即保存最原始的微博ID,并且保存所有中间转发的内容,所有中间转发内容包括转发人统统转化成字符串存储,这样刷微博时可以显示全部转发内容和转发人,不知道新浪微博是怎么设计的。

  • @,评论,点赞等消息写入MySQL,再同步至Redis消息队列,通过Java Netty框架构建NIO服务器,与客户端保持长连接,提供实时的消息提醒,目前只在首页提供红点提示,也可在全局添加Notification通知;

主要框架

运行效果

About

android 微博app

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages