實現一個完整的安卓記賬軟體
最近剛完成了一個安卓的記賬軟體,有JAVA的基礎,第一次接觸安卓,邊學習安卓邊做專案,大概花了兩個月的時間(別怕,其實只要1個月左右就可以了,前期老去浪),將專案實現了,縱觀整個過程,發現安卓的外掛是真好用,AS真好用(eclipse是什麼??真香!!),下面介紹一下做一個完整的APP應該有的步驟。
APP的下載連結在文末哦。
一.基本功能
按我個人的習慣(當然每個人習慣不同,從自己的角度來思考會讓思路更清晰)首先考慮的是APP的基本功能,記賬軟體嘛,當然是記賬與遍歷,其實就是增刪改查,那麼基礎功能就有了,就是賬單的增刪改查,再加上註冊登陸功能,一個APP應有的模型就有了。
二.業務流程圖
接下來是對專案的設計了,你希望你的APP是個什麼樣子?因為從一開始就打算賬單有同步的功能,即不同手機上寫的賬單都可以同步到一塊兒,所以在設計業務的時候,登陸是必須要優先進行的,換個說法,不登陸就不能進入APP,就不能使用。
登陸成功過後應該主介面應該是怎樣的?按照市面上的記賬軟體介面,常用的是有三個fragment,第一個fragment也就是第一個介面,顯示的是賬單的遍歷以及對賬單的操作功能,第二個fragment一般是賬單的圖表,折線圖啊餅狀圖啊之類的,第三個fragment就多了,為了使用者著想(其實是怕麻煩),第三個fragment上是使用者介面,參考一下微信的“我
好了,這樣基本的流程就有了,接下來就是寫框架了~
三.MVP框架
學習安卓的過程中,發現mvp框架應用範圍十分廣,於是就學習了MVP框架,這裡就不詳細介紹了,網上有很多關於MVP的框架,挑倆好的看個三四遍就能懂了,寫幾個功能就能上手,其實還是很簡單的,MVP框架的好處十分多,很推薦使用。
四.外掛
既然寫框架了,就要知道寫框架的意義你說是不,類似於MVP的框架按我認為只有一個作用,那就是資料傳導,將你想要的資料從資料庫或者是網上打包好,然後傳遞到View的實現類中,這就是框架的意義。
既然需要資料,那就需要基類,定義好pojo類,這裡就是資料庫表的設計了,從記賬軟體的角度來看,需要在資料庫存的表不多,因為主要是對資料的整合
- Person類,儲存了使用者的所有個人資訊。
- TotalBill類,每個賬單的資料儲存,一個賬單就是 一條資料。
- ShareBill類,這個不用說,就是儲存在伺服器上的賬單。
- BillSort類,儲存賬單肯定有賬單的型別,支出是買了面板還是買了球鞋亦或是買了佛冷(贊啊)這是不一樣的,收入是發的工資還是生活費這也是不一樣的,所以這個類的作用就是儲存賬單的分類,順便提一句,賬單的分類肯定要有相關的圖片顯示,圖片的載入會導致APP變卡,所以需要進行優化。
以上,是需要儲存在資料庫中的類,還有別的類也是需要定義用來儲存特定的資料的,這個在原始碼中已經寫了。說了這麼多,請你擡頭看看這節的標題,對,外掛,這我就要給你推薦一個十分好用資料庫的外掛了:greendao。
greendao會根據你的基類(pojo類)生成操作方法,也是十分好用。例:
public Observable<List<TotalBill>> getTotalBillByUserIdWithYM2(String id, String year, String month) {
String startStr = year + "-" + month + "-01 00:00:00";
Log.e("Local", "getTotalBillByUserIdWithYM2: "+startStr );
Date date = DateUtils.str2Date(startStr);
Date endDate = DateUtils.addMonth(date, 1);
QueryBuilder<TotalBill> queryBuilder = mSession.getTotalBillDao()
.queryBuilder()
.where(TotalBillDao.Properties.Userid.eq(id))
.where(TotalBillDao.Properties.Crdate.between(DateUtils.getMillis(date), DateUtils.getMillis(endDate)))
.where(TotalBillDao.Properties.Version.ge(0))
.orderDesc(TotalBillDao.Properties.Crdate);
return queryListToRx(queryBuilder);
}
目前資料庫完成了,接下來要幹啥來著,好象是沒有頭緒了,縷一縷,emmmmm....剛從資料庫取出來資料了,emmmm...要把資料放到頁面上顯示出來,好像沒啥事了啊,但細細一想,,這好像不是我想要的資料啊。
沒錯了,接下來的一步就是演算法了,關於資料的整合,想一想,如果有1000個賬單,那麼在對賬單資料進行整合的時候所花費的時間需要多久(特麼我怎麼知道),所以呢,應該進行非同步咯,好,在看一看標題,沒錯,還是外掛!推薦一個十分好用的非同步外掛:rxjava。
rxjava很深,不光是對執行緒的操作,還有對資料的操作,我也僅僅是入門而已,就不在這誤人子弟了,網上有很多大神寫的文章講的很好,看個兩三遍就能懂了。同樣,例:
@Override
public void getMonthDetailBills(String id, String year, String month) {
LocalRepository.getInstance().getTotalBillByUserIdWithYM2(id, year, month)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new BaseObserver<List<TotalBill>>() {
@Override
protected void onSuccees(List<TotalBill> bBills) throws Exception {
listener.onSuccess(BillUtils.packageDetailList(bBills));
}
@Override
protected void onFailure(Throwable e, boolean isNetWorkError) throws Exception {
listener.onFailure(e);
}
});
}
再推薦幾個會用到的外掛:
- eventBus :元件之間的通訊非非非非非常好用,好用到你合不攏腿
- williamChart:繪圖軟體,但是網上的講解極少,可以參考我的原始碼去用
- butterKnife:讓你從此脫離findViewById的苦海,註解,然後定義,就這麼簡單
- splash:APP啟動動畫,在動畫播放的過程中可以做一萬件事
- bmob伺服器:免費的,操作簡單的伺服器
- 最後,前臺介面方面推薦使用viewPager和fragment結合使用哦。