增加了显示当月总收入和总支出的功能,增加了选择收支类型的功能,删去了删除账目后恢复的功能。

1、数据库的升级

1、entity

添加了一个收支类型的字段:

package com.example.cashbook;

import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity
public class Notes {
@PrimaryKey(autoGenerate = true)
private int id;

@ColumnInfo(name = "money")
private int money;

@ColumnInfo(name = "money_data")
private String moneyData;

@ColumnInfo(name = "other_info")
private String otherInfo;

@ColumnInfo(name = "money_type")
private String moneyType;

public Notes() {
}

public Notes(int money, String moneyData, String otherInfo, String moneyType) {
this.money = money;
this.moneyData = moneyData;
this.otherInfo = otherInfo;
this.moneyType = moneyType;
}

public String getMoneyType() {
return moneyType;
}

public void setMoneyType(String moneyType) {
this.moneyType = moneyType;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public int getMoney() {
return money;
}

public void setMoney(int money) {
this.money = money;
}

public String getMoneyData() {
return moneyData;
}

public void setMoneyData(String moneyData) {
this.moneyData = moneyData;
}

public String getOtherInfo() {
return otherInfo;
}

public void setOtherInfo(String otherInfo) {
this.otherInfo = otherInfo;
}
}

2、dao

增加了查询所有支出和收入的金额:

package com.example.cashbook;

import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;

import java.util.List;

@Dao
public interface NotesDao {

@Insert
void insertNote(Notes... notes);

@Update
void updateNote(Notes... notes);

@Query("select * from notes")
LiveData<List<Notes>> getNotesList();

@Query("select * from notes where other_info like :pattern order by id desc")
LiveData<List<Notes>> getNotesByPattern(String pattern);

@Query("select money from notes where money_type = :pattern")
List<Integer> getMoneyListByPattern(String pattern);

@Delete
void deleteNote(Notes... notes);
}

3、database

为方便使用,使得数据库的操作可以在主线程中执行:

package com.example.cashbook;

import android.content.Context;

import androidx.annotation.NonNull;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import androidx.room.migration.Migration;
import androidx.sqlite.db.SupportSQLiteDatabase;

@Database(entities = {Notes.class},version = 2,exportSchema = false)
public abstract class NotesDatabase extends RoomDatabase {
private static NotesDatabase INSTANCE;

static synchronized NotesDatabase getDatabase(Context context){
if (INSTANCE == null){
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),NotesDatabase.class,"notes_database")
.addMigrations(VERSION_1_2)
.allowMainThreadQueries()
.build();
}
return INSTANCE;
}

public abstract NotesDao getNotesDao();

private static final Migration VERSION_1_2 = new Migration(1,2) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE notes ADD COLUMN money_type varchar");
}
};
}

4、viewmodel

增加了获取总支出和总收入金额的方法:

package com.example.cashbook;

import android.app.Application;

import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;

import java.util.List;

public class NotesViewModel extends AndroidViewModel {
private NotesRepository repository;

public NotesViewModel(@NonNull Application application) {
super(application);
repository = new NotesRepository(application);
}

public void updateNote(Notes... notes){
repository.updateNote(notes);
}

public void insertNote(Notes... notes){
repository.insertNote(notes);
}

public LiveData<List<Notes>> getAllList(){
return repository.getNotesList();
}

public LiveData<List<Notes>> getAllListByPattern(String pattern){
return repository.getNotesListByPattern(pattern);
}

public void deleteNote(Notes... notes){
repository.deleteNote(notes);
} //获得总收入
public int getMoneyIn(){
List<Integer> moenyIn = repository.getMoenyIn();
int sum = 0;
for (Integer integer : moenyIn) {
sum += integer.intValue();
}
return sum;
}

//获得总支出
public int getMoneyOut(){
List<Integer> moenyOut = repository.getMoenyOut();
int sum = 0;
for (Integer integer : moenyOut) {
sum += integer.intValue();
}
return sum;
}
}

2、布局的修改

在recyclerview上方添加了一个cardview,用来显示总支出和总收入。

记账本APP小升级的更多相关文章

  1. 安卓开发实战-记账本APP(六)

    记账本APP开发---终结篇 昨天的动态数字录屏奉上:在抖音上拍了一个(ps:欢迎点赞) https://v.douyin.com/poEjmG/ 今天将图表的内容进行了制作,我用的是MPChart的 ...

  2. 记账本APP(2)

    今天下载了Hbuiler,生成了一个记账本APP,目前里面只可以 输入今日消费 明天将会做出来记录以及计算总额于月消费.

  3. 简单记账本APP开发一

    在对Android的一些基础的知识有了一定了解,以及对于AndroidStudio的如何使用有了 一定的熟悉后,决定做一个简单的记账本APP 开发流程 1.记账本的页面 2.可以添加新的账目 (一)页 ...

  4. 家庭版记账本app开发完成

    经过这几天关于android的相关学习,对于家庭版记账本app以及开发结束. 实现的功能为:用户的注册.登录.添加支出账单.添加收入账单.显示所有的该用户的账单情况(收入和支出).生产图表(直观的显示 ...

  5. 进度1_家庭记账本App

    今天完成了昨天的初步构想,详细介绍见上一篇博客,具体项目结构和案例如下: MainActivity.java: package com.example.familybooks; import andr ...

  6. 安卓开发实战-记账本APP(四)

    今天实现的内容有:添加账本信息,个人头像的切换,密码的修改,退出登录. 添加账本信息有三个功能: ①记一笔支出项目 ②记一笔收入项目 ③清空所有项目 在此期间遇到的困难有:Activity与Fragm ...

  7. 记账本app(一)

    计划开发一款小程序应用,主要来记录自己的财务账目. 通过使用SpringBoot开发后端应用,提供接口,对应前端使用微信小程序来实现. 功能模块(用户信息,账本.账目列表,新增一笔账,修改一笔账,删除 ...

  8. 安卓开发实战-记账本APP(三)

    本次实现的是有关登录,注册和整体页面的改观,实现下方选项导致页面的切换效果. 利用到的技术有Sqlite数据库的增删改查,与fragment实现.由于暂时没有找到合适的图标,先借用微信的图标暂代一下. ...

  9. 家庭版记账本app开发进度相关界面的规划

    总的app界面包括四个页面,页面可以来回滑动.设计的时候就和微信的四个页面类似. 由于没有找到合适的图标进行替换,在此仍应用微信对应的四个图标. 总的四个页面是: 1.增加收入或者支出的小账单.当点击 ...

随机推荐

  1. .NET 5 和 C#9 /F#5 一起到来, 向实现 .NET 统一迈出了一大步

    经过一年多的开发,Microsoft 于北京时间 11 月 11 日(星期三)发布了其 .NET 5软件开发平台,强调平台的统一,并引入了 C# 9 和 F# 5 编程语言,新平台朝着桌面.Web.移 ...

  2. Doctrine\ORM\QueryBuilder 源码解析之 where

    背景 最近有需求实现类似于 QueryBuilder 的谓词语句,就去翻看了它的源码.先看两个例子 例子1 $qb = $em->createQueryBuilder(); $qb->se ...

  3. php 获取时间相差的月份和天数

    function getMonthAndDay($date1,$date2){ $datestart= date('Y-m-d',strtotime($date1)); if(strtotime($d ...

  4. 第三方库文件Joi对数据进行验证的方法以及解决Joi.validate is not a function的问题

    Joi:javaScript对象的规则描述语言和验证器 1.npm install joi@14.3.1 2.建立joi.js文件 3.导入第三方包joi const Joi = require('j ...

  5. [MIT6.006] 17. Bellman-Ford

    如果出现下图所示的负循环,会有相关点的当前最短路径为undefined(即无法定义). 之前我们也看过通用的最短路径算法思路,如下图所示: 这种通用算法会有两个问题: 时间复杂度呈指数性. 如果出现负 ...

  6. Failed connect to mirrors.cloud.aliyuncs.com:80

    在yum insatall 安装是报错 Failed connect to mirrors.cloud.aliyuncs.com:80; Connection refused 解决方法: cd /et ...

  7. netfilter 的扩展功能

    目前内核已经有filter 功能,但是往往实际运用中需要用到一些定制的filter  功能, 所以这个时候仅仅依靠现有的不能完成,于是就出现了conntrack的扩展功能, 最直接的就是tftp he ...

  8. tcpdump详解(转)

    tcpdump是Linux下强大的抓包工具,不仅可以分析数据包流向,还可以对数据包内容进行监听.通过分析数据包流向,可以了解一条连接是如何建立双向连接的.tcpdump允许用户(一般是root)拦截和 ...

  9. facl权限(getfacl/setfacl)

    file access control list:文件访问控制列表 查看facl: [root@localhost test]# getfacl hei # file: hei # owner: ro ...

  10. java版飞机大战代码

    @ 目录 前言 Plane PlaneStatus类 Power类 Gift Diji play类 over类 MainFrame主类 MyZiDan DijiZiDan Before 前言 很久之前 ...