移動應(yīng)用開發(fā)技術(shù)
期末考核報(bào)告
題?? 目:??????? 基于Android平臺的記事本軟件????????????
學(xué)生姓名? ??????????????????????????
學(xué)生學(xué)號? ??????????????????????????
專? ??業(yè)? ????????????????????????
班??? 級? ???????????????????????????
指導(dǎo)教師 ?????????????????????????
?文章來源地址http://www.zghlxwxcb.cn/news/detail-477385.html
2022 年?? 06? 月? 20?? 日
?目錄
1.??? 項(xiàng)目來源及背景... 4
2.??? 需求分析... 4
2.1 記事功能需求分析:... 4
2.1.1 顯示記事... 4
2.1.2 添加記事... 4
2.1.3 編輯記事... 5
2.2 賬戶管理... 5
2.2.1 注冊賬號... 5
2.2.2 登錄... 5
2.2.3 修改密碼... 5
2.2.4 注銷賬號... 5
2.3 數(shù)據(jù)庫需求分析... 6
2.4 界面需求分析... 6
3.??? 系統(tǒng)總體設(shè)計(jì)... 7
3.1賬戶管理... 7
3.1.1登錄... 7
3.1.2 注冊... 8
3.1.3 修改密碼... 9
3.1.4 注銷... 10
3.2 記事功能... 11
4.??? 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)... 12
4.1 記事相關(guān)功能... 12
4.1.1 顯示記事... 12
4.1.2 添加記事... 14
4.1.3???? 編輯記事... 15
4.1.4 賬戶管理... 18
4.2 數(shù)據(jù)庫... 21
4.3 背景音樂... 21
4.4 界面美化... 22
4.5其他細(xì)節(jié)... 23
5.??? 總結(jié)與體會... 23
參考文獻(xiàn)... 24
- 項(xiàng)目來源及背景
據(jù)準(zhǔn)確數(shù)據(jù)調(diào)查,截至2021年全球人口數(shù)量為78.3億,全球有52.2億人使用手機(jī),相當(dāng)于世界總?cè)丝诘?/span>66.6%,互聯(lián)網(wǎng)正在占領(lǐng)著全球化的趨勢。隨著生活節(jié)奏的加快, 工作和生活的雙重壓力全面侵襲著人們,如何避免忘記工作和生活中的諸多事情而造成不良的后果,就顯得非常重要。為此,我開發(fā)了一款基于Android系統(tǒng)的簡單記事本,它能夠便攜記錄生活和工作的諸多事情,從而幫助人們有條理的進(jìn)行時(shí)間管理。
本系統(tǒng)在Windows系統(tǒng)下的Android Studio平臺中開發(fā),代碼采用Java語言編寫,數(shù)據(jù)庫為安全輕便的SQLite。使用的配置也是簡單的BaseAdapter作為基礎(chǔ)數(shù)據(jù)適配器,簡單而又高效的進(jìn)行開發(fā)。雖然本項(xiàng)目只是一款基礎(chǔ)的日記本,但是會在今后不斷的探索中將功能與維護(hù)性進(jìn)一步的修正、改造與完善,滿足各類客戶的需求。
- 需求分析
2.1 記事功能需求分析:
2.1.1 顯示記事
用戶打開記事本一定要能夠看到之前的寫的記事內(nèi)容,所以進(jìn)入主頁面后,軟件應(yīng)該從數(shù)據(jù)庫中搜索出該用戶所寫的全部記事,并按照一定順序排列輸出。
記事本記事可以添加多條記事(理論上無數(shù)條,只要數(shù)據(jù)庫能放下),在主頁面用戶看到的應(yīng)該是記事列表,該列表存放了其所寫的所有記事。記事內(nèi)容不應(yīng)該顯示直接在列表中,這樣太占空間,所以數(shù)據(jù)庫中設(shè)計(jì)標(biāo)題列,將標(biāo)題標(biāo)題顯示在列表中,點(diǎn)擊標(biāo)題進(jìn)入另一界面,顯示詳細(xì)記事內(nèi)容。
2.1.2 添加記事
設(shè)置添加記事內(nèi)容入口,用戶點(diǎn)擊后進(jìn)入,開始編輯記事的標(biāo)題和內(nèi)容。
2.1.3 編輯記事
在主界面的記事列表中。點(diǎn)擊一條記事,能夠進(jìn)行編輯,包括更改記事(更新)和刪除記事。
2.2 賬戶管理
為了更好的保護(hù)客戶的隱私要求,也為了能讓同一臺手機(jī)的不同用戶能夠使用該軟件,軟件有專門的賬戶管理。
記事本供本機(jī)中多名用戶使用,設(shè)計(jì)賬戶管理可以讓多個(gè)用戶使用該軟件,且保證每個(gè)人只能看到自己的記事內(nèi)容。這就相當(dāng)于是一把鎖。
2.2.1 注冊賬號
注冊賬號是要對密碼進(jìn)行確認(rèn),防止用戶填寫密碼時(shí)填寫錯(cuò)誤,而導(dǎo)致該賬號雖然注冊了,但是密碼相當(dāng)于遺忘了,相當(dāng)于賬號剛注銷變報(bào)廢。當(dāng)然,賬號和密碼都不能為空。
2.2.2 登錄
登錄時(shí)對賬號密碼進(jìn)行檢驗(yàn),包括是否為空,賬號密碼是否正確。根據(jù)不同錯(cuò)誤,對用戶進(jìn)行提示。
為了讓用戶不用每次登錄都要輸入賬號密碼,要增加記住密碼選項(xiàng)。(記住密碼也有不足之處,如果其他用戶使用該機(jī)中的此軟件,那他就可以直接登錄)
2.2.3 修改密碼
修改密碼時(shí),要輸入賬號、舊密碼、新密碼并確認(rèn)新密碼,四項(xiàng)缺一不可,任何一項(xiàng)為空,都要對用戶進(jìn)行提示。四項(xiàng)填寫完成用戶確認(rèn)后,進(jìn)行賬號密碼比對,驗(yàn)證成功再進(jìn)行新密碼的確認(rèn),最后更換密碼。
2.2.4 注銷賬號
用戶不想再使用該軟件后,可以主要注銷賬戶。注銷賬戶要同時(shí)刪除數(shù)據(jù)庫中該用戶的記事數(shù)據(jù)。
2.3 數(shù)據(jù)庫需求分析
軟件主要分為兩大模塊(登錄和記事),所以需要?jiǎng)?chuàng)建兩個(gè)表,分別為用戶表和記事表
2.4 界面需求分析
界面在移動開發(fā)平臺開發(fā)中非常重要,也是用戶使用軟件的先決條件。該記事本軟件總共有8個(gè)界面,分別為登錄界面、注冊界面、密碼修改界面、注銷界面、記事列表顯示界面(主界面)、添加記事界面和編輯記事界面和更新記事界面。
背景色調(diào)要以簡潔、清新為主,盡量不讓使用者產(chǎn)生厭煩的心理。
- 系統(tǒng)總體設(shè)計(jì)
3.1賬戶管理
3.1.1登錄
3.1.2 注冊
?文章來源:http://www.zghlxwxcb.cn/news/detail-477385.html
3.1.3 修改密碼
?
3.1.4 注銷
?
3.2 記事功能
?
- 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)
4.1 記事相關(guān)功能
4.1.1 顯示記事
?
登錄后主界面為Listview組件展示的記事列表,該組件顯示用戶的所有記事數(shù)據(jù),每一條記事數(shù)據(jù)展示在item上的只是該條記事數(shù)據(jù)中的標(biāo)題和最新編輯時(shí)間。
記事列表顯示以最新編輯時(shí)間遞減顯示,這樣可以讓用戶最新添加和編輯的記事排在最前面,更加人性便捷。
由于記事本界面的記事列表是使用ListView控件展示的,因此需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)適配器對ListView控件進(jìn)行數(shù)據(jù)適配,具體步驟如下:
- 創(chuàng)建MemoAdapter類
創(chuàng)建一個(gè)MemoAdapter類繼承自BaseAdapter類。
- 創(chuàng)建Holder類
在MemoAdapter類中創(chuàng)建一個(gè)Holder類來初始化ltem界面中的控件。
BaseAdapter是一款是最萬能最好用的數(shù)據(jù)適配器之一,BaseAdapter的
View getView(final int position, View convertView, ViewGroup parent) 填充每個(gè)item的可視內(nèi)容并返回。getView方法是由系統(tǒng)自動回調(diào)的方法,每當(dāng)可視區(qū)域內(nèi)需要刷新一個(gè)item時(shí)就會被調(diào)用,用來填充item內(nèi)容、綁定事件等其他操作。因此,對ListView內(nèi)容的數(shù)據(jù)填充都在這個(gè)方法中實(shí)現(xiàn)。
在Holder類中,只有兩個(gè)TextView參數(shù),text和textTime,分別代表一個(gè)記事的標(biāo)題和最新的編輯時(shí)間。
第一次調(diào)用getView方法時(shí)convertView都為null,因此剛進(jìn)入主頁面是,會對布局實(shí)例化:
convertView = LayoutInflater.from(context).inflate(R.layout.list_member, null);
View.inflate作用是將layout_item轉(zhuǎn)換成View對象。界面中ListView能顯示多少個(gè)item,getView就要被調(diào)用多少次。
getView中實(shí)例化一個(gè)Holder對象holder,holder中的參數(shù)分別用顯示界面中對應(yīng)的TextView實(shí)例化,這相當(dāng)于holder綁定了界面中的兩個(gè)組件。
用convertView.setTag(hodler), 將holder數(shù)據(jù)存儲在convertView中。
如果convertView實(shí)例化,那么直接用getTag取出其中的holder數(shù)據(jù),此時(shí)holder綁定了界面中的兩個(gè)組件。
View中的setTag()表示給View添加一個(gè)格外的數(shù)據(jù),可以用getTag()將這個(gè)數(shù)據(jù)取出來。
之后便是用游標(biāo)將數(shù)據(jù)中的對應(yīng)的數(shù)據(jù)(標(biāo)題和最新編輯時(shí)間)取出來,再復(fù)制給holder中的兩個(gè)對應(yīng)的成員(現(xiàn)在是xml中的TextView組件)。這樣就將數(shù)據(jù)顯示出來了。
詳細(xì)代碼見源程序。
4.1.2 添加記事
添加記事,只要將組件中的String內(nèi)容取出,再放入數(shù)據(jù)庫中就可以了。
數(shù)據(jù)操作語句:database.insert(sqliteHelper.tableName, null, values);
向數(shù)據(jù)庫中插入記事數(shù)據(jù)時(shí),要在也要插入用戶名,以便顯示記事數(shù)據(jù)時(shí),能精準(zhǔn)查詢到具體某個(gè)用戶所寫的記事。這就要求從登錄后,用戶名要在各個(gè)Activity之間傳遞,只需要用Intent傳遞就可以了。
-
-
- 編輯記事
-
?
編輯包括刪除和修改(更新)。
刪除根據(jù)該條記事數(shù)據(jù)的id刪除,id為每條記事數(shù)據(jù)的自增列,也是主鍵。delete(sqliteHelper.tableName, sqliteHelper.id + "=" + pos, null);
為了避免誤刪除,設(shè)置提示:
- AlertDialog.Builder?builder?=?new?AlertDialog.Builder(OneMemoActivity.this);??
- ????????????????builder.setMessage("你確定要?jiǎng)h除嗎?")??
- ????????????????????????.setTitle("提示")??
- ????????????????????????.setPositiveButton("確定",??
- ????????????????????????????????new?DialogInterface.OnClickListener()?{??
- ????????????????????????????????????@Override??
- ????????????????????????????????????public?void?onClick(DialogInterface?dialog,?int?which)?{??
- ????????????????????????????????????????deleteByPos();??
- ????????????????????????????????????????dialog.dismiss();??
- ????????????????????????????????????????finish();??
- ????????????????????????????????????}??
- ????????????????????????????????})??
- ????????????????????????.setNegativeButton("不,剛才我手滑了",??
- ????????????????????????????????new?DialogInterface.OnClickListener()?{??
- ????????????????????????????????????@Override??
- ????????????????????????????????????public?void?onClick(DialogInterface?dialog,?int?which)?{??
- ????????????????????????????????????????dialog.dismiss();??
- ????????????????????????????????????}??
- ????????????????????????????????})??
- ????????????????????????.show();?
效果如下圖:
用戶點(diǎn)擊編輯按鈕,進(jìn)入編輯界面,進(jìn)行記事的修改,修改后點(diǎn)確認(rèn)就完成修改。修改就和添加記事的操作一致了。見下圖:
?
4.1.4 賬戶管理
?????? ?????? 1) 注冊、修改密碼、注銷
注冊、密碼修改和注銷實(shí)大同小異。不同的是注銷是,也要在數(shù)據(jù)庫中刪除注銷用戶的記事數(shù)據(jù)。
delete(sqliteHelper.tableName, sqliteHelper.user + "=" + userName, null);
從左到右分別為注冊、修改密碼、注銷
- 登錄
登錄實(shí)際上主要涉及的是賬戶密碼的驗(yàn)證,這只需要用數(shù)據(jù)庫語句從數(shù)據(jù)庫中查詢是否有該用戶名和密碼的一致的數(shù)據(jù)就可以了。
?????? 這里的新穎之處在于賬號記住密碼:
?????? 為了讓用戶不用每次登錄都要輸入賬號密碼,要增加記住密碼選項(xiàng)。(記住密碼也有不足之處,如果其他用戶使用該機(jī)中的此軟件,那他就可以直接登錄)
4.2 數(shù)據(jù)庫
軟件主要分為兩大模塊(登錄和記事),所以需要?jiǎng)?chuàng)建兩個(gè)表,分別為用戶表和記事表
字段名 |
數(shù)據(jù)類型 |
是否為主鍵 |
描述 |
id |
integer |
是 |
編號 |
datas |
text |
否 |
記事內(nèi)容 |
user |
text |
否 |
用戶名 |
lastModifyTime |
text |
否 |
最新編輯時(shí)間 |
title |
text |
否 |
記事標(biāo)題 |
字段名 |
數(shù)據(jù)類型 |
是否為主鍵 |
描述 |
_id |
integer |
是 |
編號 |
user_name |
text |
否 |
用戶名 |
user_pwd |
text |
否 |
密碼 |
項(xiàng)目中MemoSQLiteOpenHelper類繼承于SQLiteOpenHelper,用于創(chuàng)建記事本數(shù)據(jù)庫數(shù)據(jù)表。UserDataManager類是數(shù)據(jù)操作管理類,數(shù)據(jù)庫數(shù)據(jù)表的創(chuàng)建,數(shù)據(jù)的增刪改查代碼都在這里。
4.3 背景音樂
背景音樂的添加也是很簡單的,這和實(shí)驗(yàn)中做過的代碼一樣,需要注意的是,Service需要在AndroidManifest.xml中經(jīng)行注冊。用編譯軟件快捷添加的Service實(shí)際上會自動進(jìn)行注冊。
Service在主顯示Activity(MainActivity)啟動時(shí)開始運(yùn)行,在該Activity銷毀時(shí),同時(shí)也把改Service也進(jìn)行銷毀。這樣用戶登錄成功后,背景音樂便會想起。
注:此程序的默認(rèn)Activity是LoginActivity,因?yàn)橛脩暨M(jìn)入軟件必須要進(jìn)行登錄。修改默認(rèn)Activity在AndroidManifest.xml進(jìn)行。
背景音樂存放在res/raw文件夾下。
4.4 界面美化
為了讓軟件更加美觀,對軟件圖標(biāo)進(jìn)行了設(shè)置,軟件中的界面也添加了一些圖標(biāo)、圖片,添加記事的按鈕采用懸浮按鈕,按鈕中也添加了圖片。
懸浮按鈕:
<com.google.android.material.floatingactionbutton.FloatingActionButton
??????????? android:layout_width="wrap_content"
??????????? android:layout_height="wrap_content"
??????????? android:id="@+id/add"
??????????? android:layout_gravity="right|bottom"
??? ????????android:layout_marginRight="10dp"
??????????? android:layout_marginBottom="10dp"
??????????? android:src="@drawable/add"
??????????? app:borderWidth="0dp"
??????????? app:fabSize="auto"
??????????? app:maxImageSize="56dp"
??????????? app:backgroundTint="#99ccff"
??????????? app:rippleColor="#33728dff"
??????????? app:elevation="8dp"
??????????? app:pressedTranslationZ="16dp"/>
??????????? <!-- app:maxImageSize 設(shè)置圖片大小 -
從左到右分別為APP圖標(biāo)、登錄界面logo、主界面懸浮按鈕(添加記事按鈕)
4.5其他細(xì)節(jié)
音樂文件存放在res/raw文件夾下,本軟件的背景音樂是Promise.mp3,是寂靜嶺的一首刺激人積極向上,鼓舞人心的一首歌曲。
項(xiàng)目中的圖片文件放在res/drawable文件下,想要跟換軟件圖標(biāo),還需要在AndroidManifest.xml中對android:icon="@drawable/applogo"語句進(jìn)行更改。實(shí)際發(fā)現(xiàn)還需要將圖標(biāo)文件放入res/mipmap文件夾下,否則無法更變圖標(biāo)。
項(xiàng)目中的圖片是從網(wǎng)頁上下載的png圖片,用戶名和密碼圖標(biāo)是Android Studio 項(xiàng)目自帶的。
程序中盡量不要出現(xiàn)中文,所以可以將中文都放在 res/values文件夾下的strings.xml文件中。
<string name="login">登錄</string>?
想要用登錄這個(gè)詞可以用getString(R.string. login)。
在strings.xml還能動態(tài)的插入內(nèi)容
<string name="user_login_success">用戶:<xliff:g example="tom" id="id2">%1$s</xliff:g>登錄,歡迎光臨!</string>
使用語句getString(R.string.name_already_exist, “YTJ”)就可以讓表示用戶YTJ登錄,歡迎光臨!
其中:
屬性id可以隨便命名
屬性example表示舉例說明,可以省略
%n$ms:代表輸出的是字符串,n代表是第幾個(gè)參數(shù),設(shè)置m的值可以在輸出之前放置空格
%n$md:代表輸出的是整數(shù),n代表是第幾個(gè)參數(shù),設(shè)置m的值可以在輸出之前放置空格,也可以設(shè)為0m,在輸出之前放置m個(gè)0
%n$mf:代表輸出的是浮點(diǎn)數(shù),n代表是第幾個(gè)參數(shù),設(shè)置m的值可以控制小數(shù)位數(shù),如m=2.2時(shí),輸出格式為00.00
- 總結(jié)與體會
通過本次大作業(yè)項(xiàng)目實(shí)踐,將Android課程中的重點(diǎn)進(jìn)行了運(yùn)用,對Activity、Activity間通信、SQLite數(shù)據(jù)庫操作、Service、和ListView等知識點(diǎn)有了更深入的了解,也讓自己對這些要點(diǎn)的實(shí)踐運(yùn)用更加得心應(yīng)手。
本次大作業(yè)有挺多數(shù)據(jù)庫的相關(guān)操作,而我的主要卡殼點(diǎn)就是數(shù)據(jù)庫的使用。在查詢特定條件的數(shù)據(jù)時(shí),花了些許時(shí)間。比如查詢數(shù)據(jù)庫中是否有用戶名為user的用戶時(shí),可以使用
String sql="select * from " + TABLE_NAME + "where " + USER_NAME + "= '" + userName+ "'";
SQLiteDatabase.rawQuery(sql, null)??
或者
SQLiteDatabase .query(TABLE_NAME, null, USER_NAME+"="+userName, null, null, null, null);
或者
SQLiteDatabase.query(TABLE_NAME, null, USER_NAME + "=?", new String[] { user}, null, null, null);
剛開始使用了前兩種,但是顯示查不到數(shù)據(jù),網(wǎng)上看了很多相關(guān)問題怎么都發(fā)現(xiàn)不了問題出在哪里,最后才找到第三種方式,成功查找到數(shù)據(jù)。
ListView的數(shù)據(jù)顯示方式用的和書上有所不同,采用的網(wǎng)絡(luò)上大部分人使用的BaseAdapter適配器,經(jīng)過學(xué)習(xí)掌握,也算是一大收獲。
本次大作業(yè)經(jīng)過一周左右的完善,得到的記事本程序具備了基本的記事功能,也有保護(hù)隱私的功能,同時(shí)添加了背景音樂播放(詳細(xì)功能和代碼見程序包)。但是由于時(shí)間和個(gè)人能力的限制,該軟件的功能很多考慮的不是很周到,功能也沒有達(dá)到預(yù)期的目標(biāo)。后續(xù)還會再繼續(xù)增加該軟件的功能,加上那種提醒、云端備份等。
源碼、word報(bào)告、apk見資源:?基于Android平臺的記事本軟件(Android Studio項(xiàng)目+報(bào)告+app文件)https://download.csdn.net/download/MckennaGrace/85876972
參考文獻(xiàn)
[1] 郭霖 第一行代碼—Android (第2版) [M].人民郵電出版社 2016.11
[2] 黃曉先 基于Android的掌上校園交流系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 開封教育學(xué)院學(xué)報(bào),2016,03:280-281.
[4] 張生財(cái) 基于Android教務(wù)信息管理系統(tǒng)開發(fā)[J]. 科技創(chuàng)新與應(yīng)用,2014,34:72.
[5] 楊云君 Android 的設(shè)計(jì)與實(shí)現(xiàn)[M]. 北京:機(jī)械工業(yè)出版社,2013:45-49.
[6] 關(guān)于BaseAdapter中g(shù)etView方法的理解與實(shí)現(xiàn)_酷酷咔汽的博客-CSDN博客_getview作用.
?
?
到了這里,關(guān)于基于Android平臺的記事本軟件(Android Studio項(xiàng)目+報(bào)告+app文件)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!