Github項(xiàng)目地址:https://github.com/RebornC/Bmob_Community_Application
歡迎使用小伙伴們一起討論~
一 創(chuàng)作背景
無(wú)論是生活中,還是在書(shū)籍光绕、電影躺涝、戲劇等藝術(shù)作品中,往往存在一閃而過(guò)卻觸動(dòng)人心的文字段落失都。永遠(yuǎn)記得《挪威的森林》里有這樣一句話:“死并非生的對(duì)立面捂人,而作為生的一部分永存”逝段,它一直警戒著我要以一種平和、不以己悲的心態(tài)去度過(guò)這一生摹察,不要汲汲于生或汲汲于死。由此可見(jiàn)文字的力量是巨大的倡鲸。
中學(xué)時(shí)候供嚎,我喜歡準(zhǔn)備一本精致的筆記,將那些扣人心弦的文字語(yǔ)錄鄭重摘抄下來(lái)峭状。上了大學(xué)便隨意了很多克滴,往往是將文字復(fù)制在手機(jī)上的備忘錄或是直接截圖保存,這導(dǎo)致有時(shí)候想起某個(gè)句子优床,左翻右翻卻不得其蹤劝赔。
恰巧上學(xué)期在選修課上接觸到了安卓開(kāi)發(fā),于是這個(gè)寒假便尋思著獨(dú)自開(kāi)發(fā)一款簡(jiǎn)單的文字社區(qū)APP胆敞,用戶能在此發(fā)布着帽、分享罩阵、整理自己所感觸的那些語(yǔ)錄。由于個(gè)人技術(shù)有限启摄,所以通常是一邊學(xué)習(xí)一邊進(jìn)行開(kāi)發(fā)測(cè)試「灞冢現(xiàn)在該產(chǎn)品已完成初期階段的功能目標(biāo)。因此我將開(kāi)發(fā)過(guò)程與功能簡(jiǎn)介整理成這篇文檔歉备。
二 項(xiàng)目簡(jiǎn)介
- 開(kāi)發(fā)介紹及聲明
- 操作系統(tǒng):Windows 10
- 開(kāi)發(fā)工具:Android Studio 2.3 & SDK 25
- 測(cè)試設(shè)備:Android 7.0 及以上版本的手機(jī)
- 開(kāi)發(fā)時(shí)間:2018年2月
- 本項(xiàng)目創(chuàng)意完全由開(kāi)發(fā)人員原創(chuàng)傅是。素材版權(quán)歸于原作者。
- 技術(shù)簡(jiǎn)單說(shuō)明
這是一款簡(jiǎn)單的針對(duì)文字分享的社區(qū)APP蕾羊⌒剩框架基于傳統(tǒng)的MVC,界面采用Material Design設(shè)計(jì)龟再。后臺(tái)則使用了Bmob后端云進(jìn)行數(shù)據(jù)存儲(chǔ)书闸。(數(shù)據(jù)庫(kù)設(shè)置如下)
- 主要功能
- 發(fā)布并分享語(yǔ)錄,可對(duì)自己的語(yǔ)錄進(jìn)行重新編輯利凑,對(duì)他人的語(yǔ)錄進(jìn)行收藏浆劲。
- 創(chuàng)建特定主題的筆記本,將自己或他人相關(guān)的語(yǔ)錄添至其中哀澈,從而進(jìn)行歸類整理牌借。
- 「關(guān)注」- 隨時(shí)看到關(guān)注的用戶的最新語(yǔ)錄動(dòng)態(tài)。
- 「發(fā)現(xiàn)」- 參與最新活動(dòng)割按,查看熱門(mén)板塊膨报,還有開(kāi)發(fā)者的文章推薦。
- 「?jìng)€(gè)人」- 編輯信息适荣、查看我的各類內(nèi)容现柠,以及消息提示。
三 界面功能介紹
- 啟動(dòng)界面
Bmob提供了一個(gè)專門(mén)的用戶類——BmobUser來(lái)自動(dòng)處理用戶賬戶管理所需的功能弛矛。每當(dāng)用戶注冊(cè)成功或是第一次登錄成功够吩,都會(huì)在本地磁盤(pán)中有一個(gè)緩存的用戶對(duì)象。
因此汪诉,在每次打開(kāi)APP時(shí)废恋,先是歡迎界面,然后通過(guò)判斷是否存在currentUser對(duì)象來(lái)決定是直接進(jìn)入主界面還是登錄界面扒寄。邏輯流程圖如下:
歡迎界面鱼鼓、注冊(cè)界面、登錄界面的設(shè)計(jì)如下:
若忘記或更改密碼界面该编,則進(jìn)入以下界面進(jìn)行密碼重置迄本。
通過(guò)郵箱進(jìn)行重置密碼,確保賬戶的安全性课竣。
- 主界面
主界面布局采用TabLayout+ViewPager實(shí)現(xiàn)了底部導(dǎo)航嘉赎,利用setCustomView填充了自定義的tab圖標(biāo)文字樣式置媳,同時(shí)重寫(xiě)FragmentStatePagerAdapter已達(dá)到點(diǎn)擊滑動(dòng)頁(yè)面的效果。
邏輯圖如下:
界面設(shè)計(jì)如下:
接下來(lái)公条,我們分別從「關(guān)注 發(fā)現(xiàn) 個(gè)人」這三個(gè)模塊進(jìn)行功能展示拇囊。先從「?jìng)€(gè)人」談起。
- 「?jìng)€(gè)人」模塊
可以看到靶橱,「?jìng)€(gè)人」界面中寥袭,上部分是個(gè)人信息展示,點(diǎn)擊「關(guān)注 2」「粉絲 1」進(jìn)入各自對(duì)應(yīng)的列表关霸,點(diǎn)擊item可進(jìn)入相應(yīng)的用戶主頁(yè)传黄。
接著是信息列表,點(diǎn)擊第一行「賬號(hào)資料」可進(jìn)入個(gè)人信息詳細(xì)界面队寇,可選擇進(jìn)行修改膘掰。其中的頭像和封面設(shè)置則是選取手機(jī)相冊(cè)里的圖片進(jìn)行裁剪,將裁剪后的數(shù)據(jù)流填入圖片文件佳遣,獲得其uri再上傳至Bmob后端云识埋。部分界面展示如下:
先談?wù)劇競(jìng)€(gè)人」界面里右下方的懸浮按鈕,點(diǎn)擊即可進(jìn)行語(yǔ)錄編輯并發(fā)布苍日。界面如下:
回到信息列表惭聂,點(diǎn)擊第二行「我的語(yǔ)錄」即可看到自己發(fā)表的所有語(yǔ)錄,這里提供了兩種觀看模式相恃,便于用戶快速找到某一條特定語(yǔ)錄。
回到信息列表笨觅,點(diǎn)擊第三行「我的筆記」即可看到自己創(chuàng)建的所有筆記本拦耐。以下是新建筆記本的流程,創(chuàng)建完畢后见剩,你可以在某條相關(guān)語(yǔ)錄的頁(yè)面右上方點(diǎn)擊“+”號(hào)杀糯,將其添加進(jìn)這本筆記,從而起到歸類整理的作用苍苞。部分頁(yè)面展示如下:
PS:點(diǎn)擊進(jìn)某條語(yǔ)錄或某本筆記的詳情頁(yè)面里固翰,如果系統(tǒng)判斷是自己發(fā)布/創(chuàng)建的,則顯示如下圖1羹呵,點(diǎn)擊右邊符號(hào)彈出菜單抽屜骂际,可選擇重新編輯或者刪除;如果是屬于別的用戶冈欢,則顯示如下圖2歉铝、3,其中數(shù)字表示被喜歡的數(shù)量凑耻,點(diǎn)擊“愛(ài)心”符號(hào)表示喜歡太示。
回到信息列表柠贤,點(diǎn)擊第四行「我的喜歡」即可看到自己曾表示喜歡的語(yǔ)錄和筆記本。
回到信息列表类缤,點(diǎn)擊第五行「消息提示」進(jìn)入以下界面臼勉,針對(duì)每一項(xiàng),我的實(shí)現(xiàn)邏輯是這樣的餐弱。例如坚俗,我在數(shù)據(jù)表里儲(chǔ)存了相應(yīng)的Integer:“新粉絲-總數(shù)”和“新粉絲-已閱”,當(dāng)A用戶關(guān)注B用戶時(shí)岸裙,B對(duì)應(yīng)的“新粉絲-總數(shù)”都會(huì)自增1猖败。當(dāng)系統(tǒng)判斷“新粉絲-總數(shù)”不等于“新粉絲-已閱”時(shí),該項(xiàng)Item右邊則顯示為紅點(diǎn)降允,提示用戶點(diǎn)擊查看恩闻。一旦點(diǎn)擊查看,此時(shí)“新粉絲-已閱”則會(huì)設(shè)置為等于“新粉絲-總數(shù)”剧董,返回則紅點(diǎn)消失幢尚。
點(diǎn)擊進(jìn)入,界面展示如下翅楼。其中尉剩,點(diǎn)擊列表的不同控件可進(jìn)入不同的對(duì)應(yīng)界面。
- 「關(guān)注」模塊
在「關(guān)注」界面里毅臊,可以下拉刷新理茎,即時(shí)顯示關(guān)注用戶的語(yǔ)錄動(dòng)態(tài)。點(diǎn)擊語(yǔ)錄即可查看詳情管嬉。也可通過(guò)點(diǎn)擊用戶頭像或昵稱皂林,進(jìn)入用戶界面。(點(diǎn)擊不同控件都能進(jìn)入對(duì)應(yīng)的界面)
- 「發(fā)現(xiàn)」模塊
在「發(fā)現(xiàn)」界面里蚯撩,從上而下分別是搜索欄础倍,[熱門(mén)活動(dòng)]自動(dòng)輪播圖,熱門(mén)內(nèi)容板塊胎挎,還有最新的三篇文章推送沟启。
點(diǎn)擊搜索欄,進(jìn)入搜索界面犹菇,輸入不同關(guān)鍵字德迹,選擇不同標(biāo)簽,即可查到你的目標(biāo)项栏。
系統(tǒng)在后端云里讀取時(shí)間最新的三個(gè)活動(dòng)數(shù)據(jù)浦辨,通過(guò)ViewPager以輪播圖的形式進(jìn)行呈現(xiàn),建立子線程每三秒便自動(dòng)滑動(dòng)。點(diǎn)進(jìn)某個(gè)活動(dòng)流酬,閱讀活動(dòng)規(guī)則進(jìn)行#話題#參與币厕。點(diǎn)擊查看成功參與的語(yǔ)錄,「熱門(mén)」即是通過(guò)“被喜歡數(shù)”進(jìn)行排序芽腾,「實(shí)時(shí)」即是按時(shí)間排序旦装。
至于熱門(mén)內(nèi)容板塊,分別為「用戶摊滔、語(yǔ)錄阴绢、筆記、文章」艰躺。其中「用戶」通過(guò)粉絲數(shù)量進(jìn)行排序呻袭,「語(yǔ)錄」和「筆記」通過(guò)「被喜歡數(shù)量」進(jìn)行排序,「文章」則顯示所有往期文章腺兴。這樣可方便用戶進(jìn)行查詢左电、瀏覽。
下方的文章推送页响,則是我個(gè)人選取一些喜歡的短文儲(chǔ)存在后端云里篓足,系統(tǒng)讀取最新的三篇進(jìn)行呈現(xiàn),閑暇時(shí)刻即可閱讀闰蚕。
另外:APP里呈現(xiàn)的圖片栈拖,例如語(yǔ)錄配圖、筆記封面没陡、用戶頭像等等涩哟,都可點(diǎn)擊放大,拖曳縮放诗鸭,還可點(diǎn)擊右上角染簇,將圖片下載到手機(jī)本地文件里并通知手機(jī)相冊(cè)。
四 開(kāi)發(fā)體會(huì)與個(gè)人感想
首先夸一下Bmob强岸,這是一個(gè)很優(yōu)秀的云儲(chǔ)存平臺(tái),提供了封裝友好的SDK和各類對(duì)后臺(tái)數(shù)據(jù)進(jìn)行操作的API砾赔。官網(wǎng)附有詳細(xì)的使用教程蝌箍。真的十分容易上手,而且免費(fèi)版的各項(xiàng)服務(wù)指標(biāo)也能很好地滿足個(gè)人開(kāi)發(fā)者暴心。
不過(guò)在使用過(guò)程中也遇到了幾個(gè)麻煩妓盲,比如Bmob不支持多表查詢、免費(fèi)版不支持模糊查詢专普、不可對(duì)非當(dāng)前用戶所在據(jù)表進(jìn)行更改操作悯衬,最坑的是,Bmob的所有查詢操作都屬于異步執(zhí)行檀夹,只能另想它法筋粗,多繞幾步路策橘。
作為一個(gè)接觸Android開(kāi)發(fā)不久的新手,在完成這個(gè)產(chǎn)品的過(guò)程中處處踩坑娜亿,時(shí)常遇到盲點(diǎn)丽已。記得剛開(kāi)始幾天的時(shí)候,由于“發(fā)布語(yǔ)錄”設(shè)置了可加或不加配圖买决,所以一直在研究如何讓「關(guān)注」界面的ListView流暢地加載網(wǎng)絡(luò)圖片沛婴,而且要滿足其中某些Item是不顯示圖片的。后來(lái)通過(guò)巧妙地重寫(xiě)SimpleAdapter的setViewBinder方法以及使用imageLoader框架才解決了這個(gè)問(wèn)題督赤。在開(kāi)發(fā)過(guò)程中也接觸到了很多之前未使用的控件和布局嘁灯,在實(shí)現(xiàn)導(dǎo)航切換和banner輪播圖效果的時(shí)候真的成就感滿滿,但同時(shí)又得學(xué)會(huì)面對(duì)很多麻煩躲舌,比如:如何解決SwipeRefreshLayout和ViewPager的滑動(dòng)沖突丑婿?如何讓ScrollView嵌套ListView和RecyclerView的同時(shí)又使它們的高度自適應(yīng)?諸如此類∧跆牵現(xiàn)在回想枯冈,特別悔恨自己沒(méi)有記錄博客的習(xí)慣,不能把當(dāng)初遇到的那些問(wèn)題與解決方案詳細(xì)地寫(xiě)下來(lái)办悟。
但還是十分感激于此次短暫的獨(dú)立開(kāi)發(fā)經(jīng)歷尘奏,讓我收獲頗豐。其實(shí)最大的體會(huì)便是:思考規(guī)劃比打代碼更重要病蛉。當(dāng)你設(shè)計(jì)好界面布局炫加、UI交互、數(shù)據(jù)表的結(jié)構(gòu)和關(guān)聯(lián)性铺然、以及實(shí)現(xiàn)思路和步驟時(shí)俗孝,再動(dòng)手打代碼時(shí)便能流暢許多,省去了很多發(fā)呆魄健、陷入困惑的時(shí)間空隙赋铝。
PS:代碼已完整上傳,不過(guò)為了保障后端云數(shù)據(jù)庫(kù)的私密性沽瘦,我將文件中的Application ID刪除革骨。
//默認(rèn)初始化Bmob
Bmob.initialize(this, "Your Application ID");