书到用时方恨少,事非经过不知难。这篇文章主要讲述记账本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 = https://www.songbingjia.com/android/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"); } }; }
【记账本APP小升级】
?
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(); } returnsum; } ? //获得总支出 public int getMoneyOut(){ List< Integer> moenyOut = repository.getMoenyOut(); int sum = 0; for (Integer integer : moenyOut) { sum += integer.intValue(); } returnsum; } }
?
2、布局的修改
文章图片
在recyclerview上方添加了一个cardview,用来显示总支出和总收入。
推荐阅读
- 家庭记账本安卓版开发(第六天)
- Android Studio学习路程
- APPSCAN的使用
- 用APP.config配置文件连接 Sql Server数据库
- uni-app为组件uni-icons增加自定义图标(超简单)
- 安卓基础(页面导航传递数据)
- 12-5打通Flutter与Android的任督二脉Flutter Plugin开发指南-Android端实现-1
- “ObjectContent`1”类型未能序列化内容类型“application/xml; charset=utf-8”的响应正文。
- 12-6打通Flutter与Android的任督二脉Flutter Plugin开发指南-Android端实现-2