【问题1】(5分)
与收入信息相关的数据,都存储在收入信息表,App使用的所有数据都存储在Android系统集成的关系数据库SQLite中,收入信息(表名为tb_inaccount)表结构如表2-1所示。
在开发过程中,采用代码建库的方式,完成了 App中所需库的创建,请根据表2-1完成以下程序。
public void onCreate ((1)db) //创建数据库
{
//创建收入信息表
db.execSQL("create table(2) (in_id integer(3), in_money "
+"(4)not null, in_type varchar(10), in_handler varchar ((5)) ) " );
//创建其他信息表
/** 程序代码 **/
}
【问题2】(10分)
在App收入管理界面的新增布局文件中,创建收入金额输入框(id为“tvInMoney”,必填项)、收入类别下拉列表框(id为“tvInType”)、付款方输入框(id为“tvInHandler”)及保存按钮(id为“btnlnSave”),在保存按钮的监听器中编写是否保存成功的验证方法,要求收入金额不为空,且保存成功时显示“数据添加成功!”,收入金额为空时显示“请输入收入金额!”。根据描述,完成以下程序片段。
说明:Tb_inaccount是对收入信息表中所有字段封装的实体类,在该类中包含了通过四个参数初始化对象的构造方法;InaccountDAO类中提供了将实体对象tb_inaccount添加到数据库中的方法,方法原型为:public boolean add(Tb_inaccount tb_inaccount)。
试题解析:
试题1:Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(简称为CRUD)。题目使用SQLiteDatabase类提供的execSQL方法,实现数据表的创建。
根据表结构可以看出, int id为主键、 in money的类型为decimal、 in handler的字段长度为100,因此创建表的完整的 SQL语句为“create table tb_ inaccount (in_id integer primary key,in_money decimal not null, in type varchar(10), in handler varchar(100))"。
综合分析,第1-5空答案分别为
(1)SQLiteDatabase
(2)tb_inaccount
(3)primary key
(4)decimal
(5)100
试题2:在Android平台业务逻辑开发中,Bundle类用于不同Activity之间的数据传递,该类是一个final类,是一个存储和管理 key-value对的类。业务逻辑在重写的 OnCreate()方法中,初始化创建了EditText对象、Spinner对象和Button对象。单击“保存”按钮,为该按钮设置监听事件,在监听事件中使用Toast类弹出信息提示;使用InaccountDAO对象的add()方法将用户输入的信息保存在收入信息表中。
由于 super.onCreate(savedInstanceState)是调用父类 Activity的 onCreate()方法,因此空(6)处填写savedInstanceState。
(7)-(10)根据代码内容表示唯一ID,再根据题干描述,分别写出对应的ID即可,故答案分别为(7)tvInMoney(8)tvInHandler(9)tvInType
(10) btnInSave
获取屏幕中各类组件的值通过调用各类对象提供的方法来实现。EditText对象提供了'getText()”方法,Spinner提供了“getSelectedItem()”方法,所以空(11)处填写getText(),空(13)处填写getSelectedItem()。
Tb_inaccount是对收入信息表中所有字段封装的实体类,在该类中包含了通过四个参数初始化对象的构造方法,而信息表中,字段“收入金额”是数值型,调用“getText()”方法获取对象的值是字符串类型,为确保数据类型一致,需将字符串类型转换为double类型,因此空(12)处应填写“parseDouble”,该方法是Double类提供的专门用于数据类型转换的方法。根据题目描述可知,空(14)处应填写“请输入收入金额!”。