zoukankan      html  css  js  c++  java
  • 记账本APP小升级

    
    

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

     

    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,用来显示总支出和总收入。

     

  • 相关阅读:
    sqlalchemy的orm的高级用法,分组,排序,聚合等方法
    flask的SQLAlchemy,连接数据库的增删改查操作
    wtforms的form表单的高级用法
    初始wtforms表单,以及简单使用
    命令启动flask以及自定义命令
    MySQL5.5安装教程
    Java设计模式-策略模式实际应用场景
    Java设计模式-策略模式详解
    Oracle数据库之FORALL与BULK COLLECT语句
    代理模式详解(静态代理和动态代理的区别以及联系)
  • 原文地址:https://www.cnblogs.com/wuren-best/p/12309145.html
Copyright © 2011-2022 走看看