用多少眼泪才能让你相信 发表于 2022-6-23 19:49:50

安卓期末大作业——单词本APP(源码+任务书)

计算机学院

项 目 报 告

2020 - 2021 学年 第 2 学期



课程名称: Android移动开发技术
项目名称: 单词本
学生姓名:
小组成员:

2021年 6 月
题目:单词本APP
1需求分析与系统设计

[*]项目介绍

此项目是一个帮助记忆单词的单词本,用户输入要记忆的单词,系统会自动保存到sqllte数据库中,用户可以自行设置界面风格。设置单词记忆顺序等,可以查找单词,删除单词,以及隐藏中文。可以帮助用户更好的记忆单词。

[*]功能需求


[*]单词本可以通过用户输入中英文,来实现单词的添加。
[*]用户可以随意开关某个单词的中文释义
[*]用户可以删除已经添加的单词
[*]用户关机或者退出应用不会导致单词本内的单词丢失
[*]用户可以自定义单词本中单词的顺序
[*]可以选择自己喜欢的界面风格
[*]用户可以快捷的查找某个单词在有道上的详细信息
[*]用户可以查找某个单词
[*]功能需求及示意图



[*]用户点击加号按钮输入单词,键盘会自动弹出并焦点在输入框,用户输入英文和中文释义,单词本上将在最上面显示这个单词,并会有下拉动画。用户可以通过上方放回箭头取消输入。
https://img-blog.csdnimg.cn/img_convert/a6bd0c6406edd6df3e4d6844aab116f2.png
https://img-blog.csdnimg.cn/img_convert/f836e31523657b4a1b1f28d25203077c.png
https://img-blog.csdnimg.cn/img_convert/b59e74345ce091844b98109dc983118e.png


[*]用户可以通过单词盘边的按钮来关闭或开启中文意思
https://img-blog.csdnimg.cn/img_convert/67eb160d0abeb0ecffaec9cf783749e4.png

[*]向右滑可以删除单词,同时底部有提示信息,可以撤销删除,点击撤销可以还原被删除的单词
https://img-blog.csdnimg.cn/img_convert/186f430325d400cc91cdacabf2ae6276.png
https://img-blog.csdnimg.cn/img_convert/e47d1add110e1bb527e0ffc5afc01af8.png


[*]长按拖住上下滑动可以设置单词的优先级
https://img-blog.csdnimg.cn/img_convert/452ee9662fed7065a9196710d129d180.png



[*]搜索可以搜索相关的单词
https://img-blog.csdnimg.cn/img_convert/30843cf719be6fc1d949d99bc50e7c64.png


[*]菜单可以选择切换界面或者删除全部单词,将以卡片/列表显示单词
https://img-blog.csdnimg.cn/img_convert/24a136a18ec1073623514ba1b887c852.png
https://img-blog.csdnimg.cn/img_convert/5e66e96bf7a7357f30d276187b47d89b.png
注:由于时间仓促,该部分的示意图以截图的形式替代。
1.4本程序需解决的有关技术问题
1. CardView 和 constraintLayout的布局切换
2.通过继承asyncTask实现多线程查询数据库
3.查询数据库过程中多个类的调用和封装解耦,模块化开发
4.通过livedate监听数据变化来改变视图显示。
5.如何通过滑动删除单词和如何改变单词位置
6.各个framgement之间的切换导航
1.5程序流程

[*]程序启动后先通过MainActivity的onCreate方法


[*]进入wordsFramgment类,通过MyAdaper new出单词列表


[*]当通过监听WordViewModel发现数据发生改变时,会同时增删改单词列表条数


[*]对数据改变的方法通过WordViewModel类中的方法调用WordReposity中的方法再调用WordDatabase或WordDao中的方法进行增删改或者查询

5.通过Word 建立数据库表和映射关系。

2系统实现
2.1类分析与设计

(1)Word类:
1.这个这个类定义了单词条目的属性:id word chineseWord chineseInvisible 并同时映射到数据库对应的属性字段;
2.定义了set/get方法用于存取数据
https://img-blog.csdnimg.cn/img_convert/676443763651509815f4f06bb1045732.png
(2)WordDao类:
1.dao层用注解定义了增删改查方法
对于复杂查询,再注解中定义了sql语句:
A.
https://img-blog.csdnimg.cn/img_convert/1d1c527693c6d814ddb8d6f3d4b99b69.png
B.模糊查询并按倒叙排序


https://img-blog.csdnimg.cn/img_convert/a760a738bc25b90fa8bc030e638358fd.png
(3)WordDatabase类:
1.利用单例工厂模式,new了一个WordDataBase类,这个类继承了RoomDatabase,建立了数据库,用来通过getDatabase来实例化WordDao
https://img-blog.csdnimg.cn/img_convert/5e5d4fe1caadb80f8b766a34a3c170f8.png
Static 可以不需要new 就可以调用方法
Synchronized同步块只有一个再执行,反正多线程而new了多个实例
此方法构建并返回一个wordDao。同时此方法中还包含数据库的升级及修改方法
(4)WordRepository类:
1.多线程调用WordDao的方法完成增删改查。
https://img-blog.csdnimg.cn/img_convert/99df279e6ef988918389ed03b20f06df.png
2.主要功能是实现多线程
https://img-blog.csdnimg.cn/img_convert/3ae660b15e7a081c7a5741ae741656a4.png
(5)WordViewModel类:
1.通过调用WordRepository类的方法完成增删改查
https://img-blog.csdnimg.cn/img_convert/b2910315643fb1d20e6f78e3dd57b000.png
2.主要功能是处理数据相关功能,返回的LiveData可以监控数据变化,并再变化时调用相应方法来处理视图等。
https://img-blog.csdnimg.cn/img_convert/cfffaabeb5e6d922980a2d03d542cc66.png
(6)MainActivity类:
1.设置了视图导航。
https://img-blog.csdnimg.cn/img_convert/9338f7012d855297eea276b4d6065edb.png
2.重写了返回键的方法
https://img-blog.csdnimg.cn/img_convert/6dffec9d2ef35be925c630223c588ce4.png
(7)AddFragment类:
1.定义了添加单词界面的功能
2.进入界面后,将输入框聚焦在英语输入框上,并弹出键盘。
https://img-blog.csdnimg.cn/img_convert/18e07c88ac21706f8f735ffdac75194e.png
3.点击添加按钮后,通过WordViewModel将数据写入数据库,并通过导航回到主界面
https://img-blog.csdnimg.cn/img_convert/a1d04588919e313d937c924251fb5b05.png
(8)MyAdapter类
1.通过点击单词条,用intent并传入一个网址可以跳到有道词典搜索
https://img-blog.csdnimg.cn/img_convert/f9e8afea9668fc95605e498e51e6c1a8.png
2.通过查询数据库ChineseInvisible字段,初始化设置是否显示中文释义
https://img-blog.csdnimg.cn/img_convert/dda9d3a02873300e075e8a95d6d8bb59.png
(9)WordFragment类
1搜索功能

https://img-blog.csdnimg.cn/img_convert/294741d9038c1120b97e6b63a9ac2584.png

2.在WordsFragment中设置了菜单功能,点击清空数据会弹出alertDialog对话框,若选择确认,则调用wordViewModel中的deleteAll()方法删除所以数据;点击切换视图时,会先在SharePreferences中获得现在时什么视图的值,然后调用recyclerView的方法设置另一个视图。

https://img-blog.csdnimg.cn/img_convert/f37981b2e29980db71f9ba3fbf13124e.png

3.用onChildDraw画滑动后面的灰色阴影和垃圾桶图标
https://img-blog.csdnimg.cn/img_convert/0060c694b1846e00b287561396098f52.png
4.点击悬浮按钮跳到添加单词界面

https://img-blog.csdnimg.cn/img_convert/c37b10b296c8a158f6d00a039eb50ab3.png
5.移动单词和滑动删除单词功能

https://img-blog.csdnimg.cn/img_convert/d83d46325c10fe99b7b95db05cbbefe7.png
2.2 界面布局

https://img-blog.csdnimg.cn/img_convert/d57cbade8063cf6b855ebbdf7d1fedc6.png
https://img-blog.csdnimg.cn/img_convert/b3ce97f065e8a5b35987025f0465ce1a.png
https://img-blog.csdnimg.cn/img_convert/b87397bb353a58fc305a64b26ed8fa4a.png
https://img-blog.csdnimg.cn/img_convert/13b98e93b814ac35e6c3d80b3a04c4e1.png
https://img-blog.csdnimg.cn/img_convert/6ccf1ba5fa03a2479c730cdbde3cd37b.png

https://img-blog.csdnimg.cn/img_convert/4865c5e019d51391747977eec0602d6d.png
2.3关键实现

1.在AddFramgent中,若输入框两个都不为空,设置添加按钮可用
https://img-blog.csdnimg.cn/img_convert/45e264d76fd0cf52e6321db0db6bdf9e.png

2.在MyAdapter中,监听开关,若发生改变显示/隐藏中文释义,同时修改数据库中ChineseVisible字段的值。
https://img-blog.csdnimg.cn/img_convert/100a0e66c51e97475387de6422a28ac8.png
3.在WordsFragment中设置了菜单功能,点击清空数据会弹出alertDialog对话框,若选择确认,则调用wordViewModel中的deleteAll()方法删除所以数据;点击切换视图时,会先在SharePreferences中获得现在时什么视图的值,然后调用recyclerView的方法设置另一个视图。

https://img-blog.csdnimg.cn/img_convert/a80a93927039ab410e1a7c5dac78dcd6.png

4.滑动删除后会弹出一个snackbar,点击即可撤销删除

https://img-blog.csdnimg.cn/img_convert/754a94dfa5e25688077ad8182a63397b.png


5.onMove()方法处理长按拖动事件,发生拖动时,替换两个Word的id,livedate检测到数据发生改变,就重新绘画界面

https://img-blog.csdnimg.cn/img_convert/594bd2eed943826d49eea7b695d11b9e.png
3系统测试

3.1程序存在的问题
(1)再添加单词页面点击上方或下方的返回,键盘不会消失
https://img-blog.csdnimg.cn/img_convert/71d61a8a1b0e0691191119868b4ad172.png
https://img-blog.csdnimg.cn/img_convert/81439c07c6131c5c053748ecd9f27c64.png
解决方法:再AddFagment中button触发方法中添加键盘回缩方法:
https://img-blog.csdnimg.cn/img_convert/9b0bcefb56563540c703139d99d2c7a6.png

(2)在添加单词页面中,没有自动聚焦到英语单词输入框
解决方法:再onActivityCreate中添加方法
https://img-blog.csdnimg.cn/img_convert/a7b13d4d45c512314de65eeb97a4ae1a.png
(3)若长按拖动速度过快,会导致有些单词的中文意思会自动隐藏。
(4)列表界面单词之间的分界不够明显
解决方法 再每个列表条目上添加下划线。
https://img-blog.csdnimg.cn/img_convert/0c6a80e569a106bd2951722cd2148b76.png

[*]在部分手机版本中会出现搜索后单词丢失bug;
3.2运行过程示例
(1)添加单词: ---单词添加成功
https://img-blog.csdnimg.cn/img_convert/ac80bf5a222ccb80499dc505ec2bb971.png

https://img-blog.csdnimg.cn/img_convert/4602f9ca43a1b3f1cf4da48fb7dbdf8f.png

(2)删除单词: ---删除单词成功
https://img-blog.csdnimg.cn/img_convert/0c9fea04693cbf662f2ae3f6b9f637f8.png
https://img-blog.csdnimg.cn/img_convert/bbaf722ee2bfddccb0f4103afffbad18.png

(3)中文释义显示/隐层: -成功


https://img-blog.csdnimg.cn/img_convert/a778a0356a1a73072149d4811b12b56a.png
https://img-blog.csdnimg.cn/img_convert/66933bd92fff455fc226d5df34c18f8b.png

(4)切换视图: -成功

https://img-blog.csdnimg.cn/img_convert/cb6787020167ff80a164baa1e289054c.png

(5)搜索功能: --成功

https://img-blog.csdnimg.cn/img_convert/f9899870dc6112d63aa39de52ff1e8d9.png

(6)点击单词后跳到有道词典搜索详细详细 --成功

https://img-blog.csdnimg.cn/img_convert/726b23f70fa6d03cfdc4a996900e0ee3.png
https://img-blog.csdnimg.cn/img_convert/cdc139ed46a058fbc87ae937964846a4.png

4总结与建议
本课程学习了andorid的开发,经过本次项目,对android开发的整体把握更加清楚。
通过模块化开发,对每个类更加清楚,对liveData..SharePreference..navigation等类的使用和数据库的操作有了更加深入的理解。
https://download.csdn.net/download/qq_39154376/85355334https://csdnimg.cn/release/blog_editor_html/release2.1.3/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=M4ADhttps://download.csdn.net/download/qq_39154376/85355334

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 安卓期末大作业——单词本APP(源码+任务书)