最近刚完成了一个安卓的记账软件,有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结合使用哦。