zoukankan      html  css  js  c++  java
  • 家庭记账本安卓版开发:第三天

    一、成果

     点击添加账目

     选择账目类型

     点击输入日期

     点击确定,输入其它信息

     点击添加

     这里以为第一次没截图到上面的添加成功

     查看数据库

     添加成功

    二、经验总结

    首先,今天原本打算将添加与查询全部账目的部分,但是在开发过程中遇到了一些问题,关于变量的类型,如date,是否设为Date类型,但Date类型无法强转为String类型,最终在layout布局文件里设置了inputType=date解决了问题;还有下拉框组件的点击事件,原本使用的是setOnClickListener,实际应该要用mTypeSpin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 。

    再就是关于选择日期,弹出日历组件,参考了下面的博客

    https://blog.csdn.net/qq_40116418/article/details/84784593

    三、部分原码

    AddBillActivity.java

    package com.example.familybook;
    
    import android.app.Activity;
    import android.app.DatePickerDialog;
    import android.content.Intent;
    import android.os.Bundle;
    import android.text.TextUtils;
    import android.util.Log;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.Button;
    import android.widget.DatePicker;
    import android.widget.EditText;
    import android.widget.Spinner;
    import android.widget.Toast;
    
    import androidx.annotation.Nullable;
    
    import com.example.familybook.dao.BillDaoImpl;
    import com.example.familybook.dao.IBillDao;
    import com.example.familybook.entity.Bill;
    
    import java.sql.Date;
    import java.util.Calendar;
    
    
    public class AddBillActivity extends Activity {
        private int mYear;
        private int mMonth;
        private int mDay;
        private Spinner  mTypeSpin;
        private EditText mMoney;
        private EditText mDate;
        private EditText mRemark;
        private Button mAddBillBtn;
        private IBillDao mIBillDao;
        private String mTypeText;
        private String mUsername;
        private String TAG="AddBillActivity";
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_addbill);
    
            //
    
            //获取登录者的用户名
            Intent intent =getIntent();
            mUsername =intent.getStringExtra("username");
            Log.e(TAG,"使用者:"+mUsername);
    
            //获取时间
            initDate();
    
            //初始化控件
            initView();
    
            //添加监听事件
            initListener();
        }
    
        private void initDate() {
            //获取当前时间
            Calendar ca = Calendar.getInstance();
            mYear = ca.get(Calendar.YEAR);
            mMonth = ca.get(Calendar.MONTH);
            mDay = ca.get(Calendar.DAY_OF_MONTH);
        }
    
        private void initListener() {
            
            mTypeSpin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    mTypeText=parent.getItemAtPosition(position).toString();
                    Toast.makeText(AddBillActivity.this,mTypeText,Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void onNothingSelected(AdapterView<?> parent) {
    
                }
            });
            mDate.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //调用时间选择器
                    DatePickerDialog datePickerDialog = new DatePickerDialog(AddBillActivity.this, R.style.MyDatePickerDialogTheme, onDateSetListener, mYear, mMonth, mDay);
                    //获取时间戳
                    long timeStamp = System.currentTimeMillis();
                    //设置可以显示的最晚的时间
                    datePickerDialog.getDatePicker().setMaxDate(timeStamp);
                    //弹框
                    datePickerDialog.show();
                }
            });
            mAddBillBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    addBill();
                }
            });
        }
    
        /**
         * 日期选择器对话监听
         */
        private DatePickerDialog.OnDateSetListener onDateSetListener = new DatePickerDialog.OnDateSetListener() {
    
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                mYear = year;
                mMonth = monthOfYear;
                mDay = dayOfMonth;
    
                String days;
                if (mMonth + 1 < 10) {
                    if (mDay < 10) {
                        days = new StringBuffer().append(mYear).append("-").append("0").
                                append(mMonth + 1).append("-").append("0").append(mDay).append("").toString();
                    } else {
                        days = new StringBuffer().append(mYear).append("-").append("0").
                                append(mMonth + 1).append("-").append(mDay).append("").toString();
                    }
    
                } else {
                    if (mDay < 10) {
                        days = new StringBuffer().append(mYear).append("-").
                                append(mMonth + 1).append("-").append("0").append(mDay).append("").toString();
                    } else {
                        days = new StringBuffer().append(mYear).append("-").
                                append(mMonth + 1).append("-").append(mDay).append("").toString();
                    }
    
                }
    
                mDate.setText(days);
            }
        };
        private void addBill() {
            Bill bill=null;
            //获取账目类型
            if(mTypeText==null){
                //说明用户未点击按钮,选择默认首项:饮食
                mTypeText="饮食";
            }
            //获取账目金额
            String moneyText=mMoney.getText().toString().trim();
            //获取日期
            String  date= mDate.getText().toString().trim();
            //获取备注
            String remarkText=mRemark.getText().toString().trim();
            if(TextUtils.isEmpty(moneyText)){
                //账目金额为空
                Toast.makeText(this,"账目金额不可以为空",Toast.LENGTH_SHORT).show();
                return;
            }else if(TextUtils.isEmpty((CharSequence) date)){
                //账目日期为空
                Toast.makeText(this,"账目日期不可以为空",Toast.LENGTH_SHORT).show();
                return;
            }else {
                Log.e(TAG, "账户:" + mUsername);
                Log.e(TAG, "类型:" + mTypeText);
                Log.e(TAG, "金额:" + moneyText);
                Log.e(TAG, "日期:" + date);
                Log.e(TAG, "备注:" + remarkText);
                bill=new Bill(mUsername,mTypeText,moneyText,date,remarkText);
                int rs=(int)mIBillDao.AddBill(bill);
                Log.e(TAG,"rs:"+rs);
                if (rs > -1) {
                    //添加成功,跳回首面
                    Intent intent = new Intent();
                    setResult(2, intent);
                    finish();
                }
            }
        }
    
        private void initView() {
            mTypeSpin =(Spinner) this.findViewById(R.id.type_spin);
            mMoney =(EditText)this.findViewById(R.id.bill_money);
            mDate =(EditText)this.findViewById(R.id.bill_date);
            mRemark=(EditText)this.findViewById(R.id.bill_remark);
            mAddBillBtn=(Button)this.findViewById(R.id.add_bill_btn);
            mIBillDao  =new BillDaoImpl(AddBillActivity.this);
        }
    }

    Bill.java

    package com.example.familybook.entity;
    
    import java.sql.Date;
    
    /**
     * 账单实体类
     */
    public class Bill {
        private int  _id;
        private String username;
        private String type;
        private String money;
        private String date;
        private String remark;
    
        public Bill() {
        }
    
        public Bill(int _id, String username, String type, String money, String date, String remark) {
            this._id = _id;
            this.username = username;
            this.type = type;
            this.money = money;
            this.date = date;
            this.remark = remark;
        }
    
        public Bill(String username, String type, String money, String date, String remark) {
            this.username = username;
            this.type = type;
            this.money = money;
            this.date = date;
            this.remark = remark;
        }
    
    
        public int get_id() {
            return _id;
        }
    
        public void set_id(int _id) {
            this._id = _id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getType() {
            return type;
        }
    
        public void setType(String type) {
            this.type = type;
        }
    
        public String getMoney() {
            return money;
        }
    
        public void setMoney(String money) {
            this.money = money;
        }
    
        public String getDate() {
            return date;
        }
    
        public void setDate(String date) {
            this.date = date;
        }
    
        public String getRemark() {
            return remark;
        }
    
        public void setRemark(String remark) {
            this.remark = remark;
        }
    
        @Override
        public String toString() {
            return "Bill{" +
                    "_id=" + _id +
                    ", username='" + username + '\'' +
                    ", type='" + type + '\'' +
                    ", money=" + money +
                    ", date=" + date +
                    ", remark='" + remark + '\'' +
                    '}';
        }
    }

    BillDaoImpl.java

    package com.example.familybook.dao;
    
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    
    import com.example.familybook.database.FamilyBookDatabaseHelper;
    import com.example.familybook.entity.Bill;
    import com.example.familybook.utils.Constants;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class BillDaoImpl implements IBillDao {
        private  final FamilyBookDatabaseHelper mBillDatabaseHelper;
    
        public BillDaoImpl(Context context){
            mBillDatabaseHelper=new FamilyBookDatabaseHelper(context);
        }
    
        /**
         * 添加账目
         * @param bill
         * @return
         */
        @Override
        public long AddBill(Bill bill) {
            SQLiteDatabase db =mBillDatabaseHelper.getWritableDatabase();
            long result =-1;
            try {
                ContentValues values  =new ContentValues();
                values.put(Constants.BILL_TABLE_FIELD_UNAME,bill.getUsername());
                values.put(Constants.BILL_TABLE_FIELD_TYPE,bill.getType());
                values.put(Constants.BILL_TABLE_FIELD_MONEY,bill.getMoney());
                values.put(Constants.BILL_TABLE_FIELD_DATE,bill.getDate());
                values.put(Constants.BILL_TABLE_FIELD_REMARK,bill.getRemark());
                result=db.insert(Constants.BILL_TABLE_NAME,null,values);
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                db.close();
            }
    
            return result;
        }
    
       
    }

    activity_addbill.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:background="@mipmap/addbill"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:layout_width="wrap_content"
            android:text="添加账目"
            android:textSize="50sp"
            android:layout_gravity="center"
            android:layout_height="wrap_content"/>
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_marginTop="40dp"
            android:layout_height="wrap_content">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="82dp"
                android:text="请选择账目类型"
                android:textSize="20sp" />
    
            <Spinner
                android:id="@+id/type_spin"
                android:entries="@array/bill_type"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:scrollbarSize="25sp"
                android:layout_alignParentRight="true"
                android:layout_marginRight="60dp" />
        </RelativeLayout>
    
        <EditText
            android:id="@+id/bill_money"
            android:layout_marginTop="20dp"
            android:layout_width="250dp"
            android:hint="请输入账目金额"
            android:inputType="number"
            android:layout_gravity="center"
            android:layout_height="wrap_content"/>
        <EditText
            android:id="@+id/bill_date"
            android:layout_marginTop="20dp"
            android:layout_width="250dp"
            android:hint="请输入账目日期"
            android:inputType="date"
            android:layout_gravity="center"
            android:layout_height="wrap_content"/>
        <EditText
            android:id="@+id/bill_remark"
            android:layout_width="250dp"
            android:layout_marginTop="20dp"
            android:layout_gravity="center"
            android:hint="在此处添加备注"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/add_bill_btn"
            android:layout_width="wrap_content"
            android:layout_marginTop="20dp"
            android:background="@android:color/transparent"
            android:text="添加"
            android:layout_gravity="center"
            android:layout_height="wrap_content"/>
    </LinearLayout>
  • 相关阅读:
    Repeater自定义翻页 存储过程实现
    Redis常用命令
    常用的富文本框插件FreeTextBox、CuteEditor、CKEditor、FCKEditor、TinyMCE、KindEditor ;和CKEditor实例
    网站转接支付宝解决方案
    如何有效抓取SQL Server的BLOCKING信息
    SVN 冲突文件详解
    JavaScript可否多线程? 深入理解JavaScript定时机制
    MS SQL Server:分区表、分区索引详解
    支付宝外部商家购物流程
    排查数据库性能的常用sql语句
  • 原文地址:https://www.cnblogs.com/yeyueweiliang/p/12297155.html
Copyright © 2011-2022 走看看