Github項目地址:https://github.com/RebornC/Bmob_Community_Application
歡迎使用小伙伴們一起討論~
一 創作背景
無論是生活中,還是在書籍、電影、戲劇等藝術作品中,往往存在一閃而過卻觸動人心的文字段落。永遠記得《挪威的森林》里有這樣一句話:“死并非生的對立面,而作為生的一部分永存”,它一直警戒著我要以一種平和、不以己悲的心態去度過這一生,不要汲汲于生或汲汲于死。由此可見文字的力量是巨大的。
中學時候,我喜歡準備一本精致的筆記,將那些扣人心弦的文字語錄鄭重摘抄下來。上了大學便隨意了很多,往往是將文字復制在手機上的備忘錄或是直接截圖保存,這導致有時候想起某個句子,左翻右翻卻不得其蹤。
恰巧上學期在選修課上接觸到了安卓開發,于是這個寒假便尋思著獨自開發一款簡單的文字社區APP,用戶能在此發布、分享、整理自己所感觸的那些語錄。由于個人技術有限,所以通常是一邊學習一邊進行開發測試。現在該產品已完成初期階段的功能目標。因此我將開發過程與功能簡介整理成這篇文檔。
二 項目簡介
- 開發介紹及聲明
- 操作系統:Windows 10
- 開發工具:Android Studio 2.3 & SDK 25
- 測試設備:Android 7.0 及以上版本的手機
- 開發時間:2018年2月
- 本項目創意完全由開發人員原創。素材版權歸于原作者。
- 技術簡單說明
這是一款簡單的針對文字分享的社區APP。框架基于傳統的MVC,界面采用Material Design設計。后臺則使用了Bmob后端云進行數據存儲。(數據庫設置如下)
- 主要功能
- 發布并分享語錄,可對自己的語錄進行重新編輯,對他人的語錄進行收藏。
- 創建特定主題的筆記本,將自己或他人相關的語錄添至其中,從而進行歸類整理。
- 「關注」- 隨時看到關注的用戶的最新語錄動態。
- 「發現」- 參與最新活動,查看熱門板塊,還有開發者的文章推薦。
- 「個人」- 編輯信息、查看我的各類內容,以及消息提示。
三 界面功能介紹
- 啟動界面
Bmob提供了一個專門的用戶類——BmobUser來自動處理用戶賬戶管理所需的功能。每當用戶注冊成功或是第一次登錄成功,都會在本地磁盤中有一個緩存的用戶對象。
因此,在每次打開APP時,先是歡迎界面,然后通過判斷是否存在currentUser對象來決定是直接進入主界面還是登錄界面。邏輯流程圖如下:
歡迎界面、注冊界面、登錄界面的設計如下:
若忘記或更改密碼界面,則進入以下界面進行密碼重置。
通過郵箱進行重置密碼,確保賬戶的安全性。
- 主界面
主界面布局采用TabLayout+ViewPager實現了底部導航,利用setCustomView填充了自定義的tab圖標文字樣式,同時重寫FragmentStatePagerAdapter已達到點擊滑動頁面的效果。
邏輯圖如下:
界面設計如下:
接下來,我們分別從「關注 發現 個人」這三個模塊進行功能展示。先從「個人」談起。
- 「個人」模塊
可以看到,「個人」界面中,上部分是個人信息展示,點擊「關注 2」「粉絲 1」進入各自對應的列表,點擊item可進入相應的用戶主頁。
接著是信息列表,點擊第一行「賬號資料」可進入個人信息詳細界面,可選擇進行修改。其中的頭像和封面設置則是選取手機相冊里的圖片進行裁剪,將裁剪后的數據流填入圖片文件,獲得其uri再上傳至Bmob后端云。部分界面展示如下:
先談談「個人」界面里右下方的懸浮按鈕,點擊即可進行語錄編輯并發布。界面如下:
回到信息列表,點擊第二行「我的語錄」即可看到自己發表的所有語錄,這里提供了兩種觀看模式,便于用戶快速找到某一條特定語錄。
回到信息列表,點擊第三行「我的筆記」即可看到自己創建的所有筆記本。以下是新建筆記本的流程,創建完畢后,你可以在某條相關語錄的頁面右上方點擊“+”號,將其添加進這本筆記,從而起到歸類整理的作用。部分頁面展示如下:
PS:點擊進某條語錄或某本筆記的詳情頁面里,如果系統判斷是自己發布/創建的,則顯示如下圖1,點擊右邊符號彈出菜單抽屜,可選擇重新編輯或者刪除;如果是屬于別的用戶,則顯示如下圖2、3,其中數字表示被喜歡的數量,點擊“愛心”符號表示喜歡。
回到信息列表,點擊第四行「我的喜歡」即可看到自己曾表示喜歡的語錄和筆記本。
回到信息列表,點擊第五行「消息提示」進入以下界面,針對每一項,我的實現邏輯是這樣的。例如,我在數據表里儲存了相應的Integer:“新粉絲-總數”和“新粉絲-已閱”,當A用戶關注B用戶時,B對應的“新粉絲-總數”都會自增1。當系統判斷“新粉絲-總數”不等于“新粉絲-已閱”時,該項Item右邊則顯示為紅點,提示用戶點擊查看。一旦點擊查看,此時“新粉絲-已閱”則會設置為等于“新粉絲-總數”,返回則紅點消失。
點擊進入,界面展示如下。其中,點擊列表的不同控件可進入不同的對應界面。
- 「關注」模塊
在「關注」界面里,可以下拉刷新,即時顯示關注用戶的語錄動態。點擊語錄即可查看詳情。也可通過點擊用戶頭像或昵稱,進入用戶界面。(點擊不同控件都能進入對應的界面)
- 「發現」模塊
在「發現」界面里,從上而下分別是搜索欄,[熱門活動]自動輪播圖,熱門內容板塊,還有最新的三篇文章推送。
點擊搜索欄,進入搜索界面,輸入不同關鍵字,選擇不同標簽,即可查到你的目標。
系統在后端云里讀取時間最新的三個活動數據,通過ViewPager以輪播圖的形式進行呈現,建立子線程每三秒便自動滑動。點進某個活動,閱讀活動規則進行#話題#參與。點擊查看成功參與的語錄,「熱門」即是通過“被喜歡數”進行排序,「實時」即是按時間排序。
至于熱門內容板塊,分別為「用戶、語錄、筆記、文章」。其中「用戶」通過粉絲數量進行排序,「語錄」和「筆記」通過「被喜歡數量」進行排序,「文章」則顯示所有往期文章。這樣可方便用戶進行查詢、瀏覽。
下方的文章推送,則是我個人選取一些喜歡的短文儲存在后端云里,系統讀取最新的三篇進行呈現,閑暇時刻即可閱讀。
另外:APP里呈現的圖片,例如語錄配圖、筆記封面、用戶頭像等等,都可點擊放大,拖曳縮放,還可點擊右上角,將圖片下載到手機本地文件里并通知手機相冊。
四 開發體會與個人感想
首先夸一下Bmob,這是一個很優秀的云儲存平臺,提供了封裝友好的SDK和各類對后臺數據進行操作的API。官網附有詳細的使用教程。真的十分容易上手,而且免費版的各項服務指標也能很好地滿足個人開發者。
不過在使用過程中也遇到了幾個麻煩,比如Bmob不支持多表查詢、免費版不支持模糊查詢、不可對非當前用戶所在據表進行更改操作,最坑的是,Bmob的所有查詢操作都屬于異步執行,只能另想它法,多繞幾步路。
作為一個接觸Android開發不久的新手,在完成這個產品的過程中處處踩坑,時常遇到盲點。記得剛開始幾天的時候,由于“發布語錄”設置了可加或不加配圖,所以一直在研究如何讓「關注」界面的ListView流暢地加載網絡圖片,而且要滿足其中某些Item是不顯示圖片的。后來通過巧妙地重寫SimpleAdapter的setViewBinder方法以及使用imageLoader框架才解決了這個問題。在開發過程中也接觸到了很多之前未使用的控件和布局,在實現導航切換和banner輪播圖效果的時候真的成就感滿滿,但同時又得學會面對很多麻煩,比如:如何解決SwipeRefreshLayout和ViewPager的滑動沖突?如何讓ScrollView嵌套ListView和RecyclerView的同時又使它們的高度自適應?諸如此類。現在回想,特別悔恨自己沒有記錄博客的習慣,不能把當初遇到的那些問題與解決方案詳細地寫下來。
但還是十分感激于此次短暫的獨立開發經歷,讓我收獲頗豐。其實最大的體會便是:思考規劃比打代碼更重要。當你設計好界面布局、UI交互、數據表的結構和關聯性、以及實現思路和步驟時,再動手打代碼時便能流暢許多,省去了很多發呆、陷入困惑的時間空隙。
PS:代碼已完整上傳,不過為了保障后端云數據庫的私密性,我將文件中的Application ID刪除。
//默認初始化Bmob
Bmob.initialize(this, "Your Application ID");