草庐IT

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

ChatGPT云炬学长 2023-09-04 原文

计算机学院

项 目 报 告

2020 - 2021 学年 第 2 学期

课程名称: Android移动开发技术

项目名称: 单词本

学生姓名:

小组成员:

2021年 6 月

题目:单词本APP

1需求分析与系统设计

  1. 项目介绍

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

  1. 功能需求

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

  1. 用户点击加号按钮输入单词,键盘会自动弹出并焦点在输入框,用户输入英文和中文释义,单词本上将在最上面显示这个单词,并会有下拉动画。用户可以通过上方放回箭头取消输入。

  1. 用户可以通过单词盘边的按钮来关闭或开启中文意思

  1. 向右滑可以删除单词,同时底部有提示信息,可以撤销删除,点击撤销可以还原被删除的单词

  1. 长按拖住上下滑动可以设置单词的优先级

  1. 搜索可以搜索相关的单词

  1. 菜单可以选择切换界面或者删除全部单词,将以卡片/列表显示单词

注:由于时间仓促,该部分的示意图以截图的形式替代。

1.4本程序需解决的有关技术问题

1. CardView 和 constraintLayout的布局切换

2.通过继承asyncTask实现多线程查询数据库

3.查询数据库过程中多个类的调用和封装解耦,模块化开发

4.通过livedate监听数据变化来改变视图显示。

5.如何通过滑动删除单词和如何改变单词位置

6.各个framgement之间的切换导航

1.5程序流程

  1. 程序启动后先通过MainActivity的onCreate方法

  1. 进入wordsFramgment类,通过MyAdaper new出单词列表

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

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

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

2系统实现

2.1类分析与设计

(1)Word类:

1.这个这个类定义了单词条目的属性:id word chineseWord chineseInvisible 并同时映射到数据库对应的属性字段;

2.定义了set/get方法用于存取数据

(2)WordDao类:

1.dao层用注解定义了增删改查方法

对于复杂查询,再注解中定义了sql语句:

A.

B.模糊查询并按倒叙排序

(3)WordDatabase类:

1.利用单例工厂模式,new了一个WordDataBase类,这个类继承了RoomDatabase,建立了数据库,用来通过getDatabase来实例化WordDao

Static 可以不需要new 就可以调用方法

Synchronized同步块只有一个再执行,反正多线程而new了多个实例

此方法构建并返回一个wordDao。同时此方法中还包含数据库的升级及修改方法

(4)WordRepository类:

1.多线程调用WordDao的方法完成增删改查。

2.主要功能是实现多线程

(5)WordViewModel类:

1.通过调用WordRepository类的方法完成增删改查

2.主要功能是处理数据相关功能,返回的LiveData可以监控数据变化,并再变化时调用相应方法来处理视图等。

(6)MainActivity类:

1.设置了视图导航。

2.重写了返回键的方法

(7)AddFragment类:

1.定义了添加单词界面的功能

2.进入界面后,将输入框聚焦在英语输入框上,并弹出键盘。

3.点击添加按钮后,通过WordViewModel将数据写入数据库,并通过导航回到主界面

(8)MyAdapter类

1.通过点击单词条,用intent并传入一个网址可以跳到有道词典搜索

2.通过查询数据库ChineseInvisible字段,初始化设置是否显示中文释义

(9)WordFragment类

1搜索功能

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

3.用onChildDraw画滑动后面的灰色阴影和垃圾桶图标

4.点击悬浮按钮跳到添加单词界面

5.移动单词和滑动删除单词功能

2.2 界面布局

2.3关键实现

1.在AddFramgent中,若输入框两个都不为空,设置添加按钮可用

2.在MyAdapter中,监听开关,若发生改变显示/隐藏中文释义,同时修改数据库中ChineseVisible字段的值。

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

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

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

3系统测试

3.1程序存在的问题

(1)再添加单词页面点击上方或下方的返回,键盘不会消失

解决方法:再AddFagment中button触发方法中添加键盘回缩方法:

(2)在添加单词页面中,没有自动聚焦到英语单词输入框

解决方法:再onActivityCreate中添加方法

(3)若长按拖动速度过快,会导致有些单词的中文意思会自动隐藏。

(4)列表界面单词之间的分界不够明显

解决方法 再每个列表条目上添加下划线。

  1. 在部分手机版本中会出现搜索后单词丢失bug;

3.2运行过程示例

(1)添加单词: ---单词添加成功

(2)删除单词: ---删除单词成功

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

(4)切换视图: -成功

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

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

4总结与建议

本课程学习了andorid的开发,经过本次项目,对android开发的整体把握更加清楚。

通过模块化开发,对每个类更加清楚,对liveData..SharePreference..navigation等类的使用和数据库的操作有了更加深入的理解。

https://download.csdn.net/download/qq_39154376/85355334https://download.csdn.net/download/qq_39154376/85355334

有关安卓期末大作业——单词本APP(源码+任务书)的更多相关文章

  1. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  2. ruby - 如何使用 RSpec::Core::RakeTask 创建 RSpec Rake 任务? - 2

    如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake

  3. ruby-on-rails - 在 ruby​​ 中使用 gsub 函数替换单词 - 2

    我正在尝试用ruby​​中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了

  4. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  5. ruby-on-rails - 如何重命名或移动 Rails 的 README_FOR_APP - 2

    当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?

  6. UE4 源码阅读:从引擎启动到Receive Begin Play - 2

    一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame

  7. ruby - 使用 postgres.app 在 rvm 下要求 pg 时出错 - 2

    我正在使用Postgres.app在OSX(10.8.3)上。我已经修改了我的PATH,以便应用程序的bin文件夹位于所有其他文件夹之前。Rammy:~phrogz$whichpg_config/Applications/Postgres.app/Contents/MacOS/bin/pg_config我已经安装了rvm并且可以毫无错误地安装pggem,但是当我需要它时我得到一个错误:Rammy:~phrogz$gem-v1.8.25Rammy:~phrogz$geminstallpgFetching:pg-0.15.1.gem(100%)Buildingnativeextension

  8. ruby - 正则表达式将非英文字母匹配为非单词字符 - 2

    @raw_array[i]=~/[\W]/非常简单的正则表达式。当我用一些非拉丁字母(具体来说是俄语)尝试时,条件是错误的。我能用它做什么? 最佳答案 @raw_array[i]=~/[\p{L}]/使用西里尔字符进行测试。引用:http://www.regular-expressions.info/unicode.html#prop 关于ruby-正则表达式将非英文字母匹配为非单词字符,我们在StackOverflow上找到一个类似的问题: https://

  9. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  10. Python 刷Leetcode题库,顺带学英语单词(31) - 2

    ValidPalindromeGivenastring,determineifitisapalindrome,consideringonlyalphanumericcharactersandignoringcases. [#125]Example:"Aman,aplan,acanal:Panama"isapalindrome."raceacar"isnotapalindrome.Haveyouconsiderthatthestringmightbeempty?Thisisagoodquestiontoaskduringaninterview.Forthepurposeofthisproblem

随机推荐