Aiemu / Tilitili

an android app used to post info of THU.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Tilitili App 项目说明(每日清华选题)

人员分工

前端:李胜涛、曾正
后端:郑炜熹

Project 实现功能及其使用说明

  • 注册
    打开app后进入登录界面点击注册按钮进入注册界面,填写完个人信息后会向注册的校园邮箱发送验证邮件,点击邮件中的链接即完成注册。

  • 登录
    注册完毕后回到登录界面,填写用户名密码后点击登录按钮。通过有时效的sessionID维持登录状态,再次打开app时可避免登录操作。

  • 重置密码
    点击登录界面的忘记密码进入重置密码界面,在填写完用户名及新密码后点击修改密码,会向注册的校园邮箱发送确认邮件,点击邮件中的链接以完成密码的重置。

  • 分页展示推送,按热度/时间展示推送
    登录后进入首页,分页展示推送消息,可选择按热度或时间排序。下拉以刷新界面,上拉以加载更多页面。

  • 搜索推送(文章/视频)或用户
    在首页搜索栏输入关键词以搜索用户或推送,跳转至搜索结果界面后可选择结果为用户或推送。

  • 查看用户信息、关注用户、用户发送私信
    在搜索结果中点击用户会跳转至用户的个人信息界面,可在此查看该用户基本信息并关注该用户。

  • 收藏/点赞/评论/转发推送(文章/视频) 在首页、搜索结果界面、动态界面、用户历史投稿界面点击跳转至推送详情界面,展示推送的详细内容。在推送内容底部工具栏展示有该推送的点赞数、评论数、可选择转发/收藏该推送,点击点赞图标以确认或取消点赞,点击评论图标以进入评论界面,在评论界面可查看该推送的评论或发表评论。

  • 文章支持展示复杂的结构
    使用html组织文章结构,支持图片,多级标题等显示

  • 视频支持暂停、快进(退)、进度条拖动

  • 按板块查看推送(文章/视频)
    点击首页底部导航栏可进入板块页面,将推送按投稿时选择的板块进行分类。板块分为公共板块和权限板块,权限板块仅允许后台设置的权限用户(username: Tsinghuapassword: 12345678)发布推送.

  • 查看关注用户动态及动态的点赞评论数
    点击首页底部导航栏可进入动态页面,展示关注用户所发布的推送。

  • 查看/修改个人信息,收藏列表,关注列表,历史记录,历史投稿
    点击首页底部导航栏可进入个人信息页面,可在此查看/修改用户的基础信息,查看用户收藏列表、关注列表、历史记录、历史投稿。

  • 用户聊天
    在个人信息界面可查看用户的近期的会话,可在此发送和查看聊天内容。此外聊天也可通过搜索到的用户的个人信息界面进行。

  • 投稿(文章/视频)
    在个人信息界面可编辑并发送推送。包括标题、简介、详细内容、推送封面。其中详细内容可进行较为复杂的文章内容编辑,包括插入图片,多级标题,设置文字样式等。

程序运行方法

后端服务启动流程

  1. 首先需要在服务端(服务器或本地)安装mysql服务.
  2. 将application.properties的spring.datasource.usernamespring.datasource.password 设置为mysql某个用户的用户名和密码.
  3. 登录mysql, 并执行一次TableInit.sql中的SQL语句, 进行数据库的初始化.
  4. 在Backend目录下运行命令mvn spring-boot:run.

前端服务启动流程

  1. 首先将tilitili/app/src/main/java/com/example/tilitili/ConfigCopy.java拷贝一份到相同目录下并命名为Config.java,之后在该文件中修改服务器ip地址和端口。
  2. 之后等待gradle同步,由于没有配置国内源,所以该过程需要Android Studio以及gradle配置proxy代理。
  3. 之后便可以启动运行,建议模拟器api不高于28。

代码简单说明

代码分为两部分,Backend目录下为后端项目,tilitili目录下为前端项目。

后端

后端基于Spring Boot进行实现,

  • 使用MyBatis+MySQL组合, 构造DAO, 将业务数据处理和实际数据库操作解耦.
  • 使用Spring Boot提供的RestController, 对不同类型的请求分别处理.

前端

采用Android Studio开发,最低兼容安卓版本8.0,测试机型版本有安卓8和9,均正常运行,但在安卓10(API 29)上会出现无法读取本地图片的状况。这是由于安卓10的文件存储不能够使用图片路径直接读取存储卡内的图片造成的,其余功能均正常。

前端设计和说明

使用外部库

前端采用okhttp进行数据的传输,包括从服务器请求数据、上传文件等。富文本编辑器采用了richeditor外部组件,并对其进行了部分调整。采用了SQLite来对本地的聊天记录进行存储和获取。

代码设计说明

  • 网络部分利用对OkHttp进行了封装,利用单例模式构造,并对不同的返回状态码进行了处理,使其在返回时调用不同的回调函数。并在其中利用Handler实现了直接在回调函数中获取到数据之后进行ui的更新。在使用中我们只需要传入url,参数以及不同返回状态时需要回调的不同函数即可。并且对于401这类请求做了统一处理,如返回的状态码为401时将删除保存的登录信息并返回登录界面。对于回调函数我们也进行了封装处理,在其中加入了不同的提示框可以在请求时自动弹出和关闭。这部分代码主要位于http目录下。
  • 身份验证登录部分:我们会将用户登录的cookie信息保存在本地,在请求数据或者上传文件时进行验证,用户的其他信息由一个单例模式的类管理,UserManagerApplication,这个类可以帮助我们保存、删除、更新用户信息,由于全局唯一,也保证了用户数据的统一性。
  • 用户聊天消息我们保存在本地,利用android Room persistence library存储在本地的SQLite之中,不会在服务器保留数据。
  • 投稿方面支持用户文章和视频投稿,用户文章编辑采用了richeditor富文本编辑器,可以实现绝大多数所需要的文字效果,也支持插入图片,图片稍后会上传到服务器上。

原型设计

原型设计请见原型设计

后端设计说明

数据库设计

为了满足应用的业务要求, 我们需要设计数据库. 根据我们应用的类型, 设计以下的表:

  • User: 存储用户的信息
  • Submission: 存储投稿信息
  • Comment: 存储评论信息
  • Plate: 存储板块信息
  • PlateAuth: 存储用户对板块的权限
  • Follow: 存储用户之间关注关系
  • Favorite: 存储用户与投稿收藏关系
  • Likes: 存储用户点赞关系
  • History: 存储用户观看历史
  • Message: 存储离线消息.

具体元素的设计可以见model的java类和TableInit.sql.

API设计

API的设计请见API设计文档.

RestController

根据API的设计, 我们以各个API开头作为分类, 设计不同的RestController:

  • GeneralController: 负责处理一些通用请求, 例如登录注册, 静态文件上传等.
  • UserController: 负责处理用户数据, 例如获取修改用户信息, 查看历史记录和投稿记录等.
  • PlateController: 负责处理板块有关请求, 例如获取所有板块信息等.
  • SubmissionController: 负责处理投稿有关的请求, 例如获取投稿详细内容, 投稿, 根据时间和热度获取 投稿列表等.

错误信息格式

为了让前端能更好地处理后端返回的错误信息, 后端统一了SpringBoot的错误信息和本应用规定的业务错误信息:

  • timestamp: 发生错误的时间.
  • uri: 发生错误时访问的API.
  • errorCode: 错误码.
  • errorMessage: 具体错误信息.

实现在BusinessExceptionControllerBusinessExceptionHandler内.

其他

为了免去每次新增需要登陆才能使用的API都进行验证的麻烦, 后端实现了@LoginAuth注解, 具体为在 spring-boot的框架基础上构造一个拦截器, 每次收到请求, 都会检查该请求处理函数是否被 @LoginAuth修饰, 如果有, 则检查是否有登录信息, 没有登录则会拒绝访问.

About

an android app used to post info of THU.

License:MIT License


Languages

Language:Java 97.4%Language:JavaScript 1.6%Language:TSQL 1.0%