• 【Android】家庭记账本手机版开发报告一


    一、说在前面

    昨天 学习了数据库的一些简单操作
    今天 使用数据库,完成对记账本的账单记录的增删
    问题 没有

    二、数据库

    1、账单表的结构

     

     (注 id:账单的唯一标识,uid:记录账单的用户的id,cost_time:记录账单的时间,cost_type:账单类型,cost_money:账单金额。)

    2、Entity:AccountRecord.java

    package com.me.familybookkeepingbook;
    
    import androidx.room.ColumnInfo;
    import androidx.room.Entity;
    import androidx.room.PrimaryKey;
    
    @Entity
    public class AccountRecord {
        @PrimaryKey(autoGenerate = true)
        private int id;
        @ColumnInfo(name = "uid")
        private int uid;
        @ColumnInfo(name = "cost_time")
        private String costTime;
        @ColumnInfo(name = "cost_type")
        private String costType;
        @ColumnInfo(name = "cost_money")
        private Double costMoney;
    
        public AccountRecord(int uid, String costTime, String costType, Double costMoney) {
            this.uid = uid;
            this.costTime = costTime;
            this.costType = costType;
            this.costMoney = costMoney;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public int getUid() {
            return uid;
        }
    
        public void setUid(int uid) {
            this.uid = uid;
        }
    
        public String getCostTime() {
            return costTime;
        }
    
        public void setCostTime(String costTime) {
            this.costTime = costTime;
        }
    
        public String getCostType() {
            return costType;
        }
    
        public void setCostType(String costType) {
            this.costType = costType;
        }
    
        public Double getCostMoney() {
            return costMoney;
        }
    
        public void setCostMoney(Double costMoney) {
            this.costMoney = costMoney;
        }
    }

    3、对数据库的操作:AccountRecordDao.java

    package com.me.familybookkeepingbook;
    
    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 AccountRecordDao {
        @Insert
        void insertAccountRecord (AccountRecord ... AccountRecords);
        @Update
        void updateAccountRecord (AccountRecord ... AccountRecords);
        @Delete
        void deleteAccountRecord (AccountRecord ... AccountRecords);
        @Query("DELETE From ACCOUNTRECORD")
        void deleteAllAccountRecord ();
        @Query("SELECT * From ACCOUNTRECORD ORDER BY ID DESC")
        List<AccountRecord> getAllAccountRecord ();
    }

    AccountRecordDatabase.java

    package com.me.familybookkeepingbook;
    
    import androidx.room.Database;
    import androidx.room.RoomDatabase;
    @Database(entities = {AccountRecord.class },version = 1,exportSchema = false)
    public abstract class AccountRecordDatabase extends RoomDatabase {
        public abstract AccountRecordDao getAccountRecordDao();
    }

    三、界面布局

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guideline"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            app:layout_constraintGuide_percent="0.8" />
    
        <ScrollView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_marginStart="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginEnd="1dp"
            android:layout_marginRight="1dp"
            app:layout_constraintBottom_toTopOf="@+id/guideline"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">
    
            <TextView
                android:id="@+id/textView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/textview"
                android:textSize="24sp" />
        </ScrollView>
    
        <Button
            android:id="@+id/buttonInsert"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/buttonInsert"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toStartOf="@+id/buttonDelete"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="@+id/guideline" />
    
        <Button
            android:id="@+id/buttonDelete"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/buttonDalete"
            app:layout_constraintBottom_toBottomOf="@+id/buttonInsert"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/buttonInsert"
            app:layout_constraintTop_toTopOf="@+id/buttonInsert" />
    </androidx.constraintlayout.widget.ConstraintLayout>

    四、界面和数据的绑定

    1、界面的更新

    void updateView(){
            List<AccountRecord> list = accountRecordDao.getAllAccountRecord();
            String text = "";
            for (int i=0;i<list.size();i++){
                AccountRecord accountRecord = list.get(i);
                text += accountRecord.getId() + "   " + accountRecord.getCostType() + "   "+accountRecord.getCostTime() +"   "+
                        accountRecord.getCostMoney() +"
    ";
            }
            textView.setText(text);
        }

    2、按键的监听

     buttonInsert.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    AccountRecord accountRecord = new AccountRecord(1,"2020-01-26","学习",100.0);
                    accountRecordDao.insertAccountRecord(accountRecord);
                    updateView();
                }
            });
            buttonDelete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    accountRecordDao.deleteAllAccountRecord();
                    updateView();
                }
            });

    五、运行测试

    1、插入:

     2、删除

  • 相关阅读:
    获取ios设备的当前IP地址
    swift 日期的基本操作
    iOS ChildViewController使用示例
    Swift 进制转换问题
    objc_msgSend iOS8 EXC_BAD_ACCESS
    objc非主流代码技巧
    黑魔法__attribute__((cleanup))
    判断一个对象是否实现了某方法,而非继承而来
    Controlling How NSThread and NSRunLoop Exit
    万年历-农历-节气
  • 原文地址:https://www.cnblogs.com/20183544-wangzhengshuai/p/12228810.html
Copyright © 2020-2023  润新知