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

 

posted @ 2020-02-14 19:19  Nevesettle  阅读(248)  评论(0编辑  收藏  举报