1. 程式人生 > >實現一個完整的安卓記賬軟體

實現一個完整的安卓記賬軟體

     最近剛完成了一個安卓的記賬軟體,有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結合使用哦。

伸手黨們記得給點贊和github上的加星啊啊啊啊啊!!!!