这是教材Demo里的记录项:
这是我的:
我现在要参考Demo中的实现方法,让我的注册信息保存到SQLite里面。
(1)基础代码的修改
在项目包中创建一个bean目录,在其下创建一个名为UserInfo.java的代码文件。该代码文件主要是定义一个数据库表的数据结构类,并在构造方法中对数据进行初始化。
把内容修改成自己的条目和类型:
把database和目录下的MyDBHelper也拿过来,这个java文件写着数据库增删改查的方法:
import里面把Userinfo改成自己的位置:
然后,修改DB_NAME和TABLE_NAME为数据库名和表名:
然后修改下面的条目,以和自己的条目匹配:
(2)注册页中加入SQLiteWriteActivity的代码
第一步,import加入导入UserInfo和MyDBHelper的代码,以导入用户信息模板和数据库操作方法
然后,实例化MyDBhelper:
添加两个方法以打开和关闭数据库连接:
@Override
protected void onStart() {
super.onStart();
mHelper = MyDBHelper.getInstance(this, 2);
mHelper.openWriteLink();
}
@Override
protected void onStop() {
super.onStop();
mHelper.closeLink();
}
最后,在注册/登录 按钮OnClick方法中添加新建用户信息记录并写入数据库的代码:
附上我“注册”按钮的方法代码(包括写入数据库和打开注册信息页面):
public void btReg(View view) {
EditText usrnText = (EditText) findViewById(R.id.username);
EditText pswdText1 = (EditText) findViewById(R.id.password);
EditText pswdText2 = (EditText) findViewById(R.id.password2);
EditText beizhuText = (EditText) findViewById(R.id.beizhu);
RadioGroup sexGroup = findViewById(R.id.sex);
CheckBox c1 = findViewById(R.id.ah_cg);
CheckBox c2 = findViewById(R.id.ah_tw);
CheckBox c3 = findViewById(R.id.ah_sw);
CheckBox c4 = findViewById(R.id.ah_dlq);
CheckBox[] cbox={c1,c2,c3,c4};
String username = usrnText.getText().toString();
String password1 = pswdText1.getText().toString();
String password2 = pswdText2.getText().toString();
String sex = "";
String income = "";
String hobby="";
String addition = beizhuText.getText().toString();
if (password1.equals("")||password2.equals("")){ //判断两次密码是否为空
Toast.makeText(getApplicationContext(),"密码不能为空",Toast.LENGTH_SHORT).show();
}else if(password1.equals(password2)){
Intent intent = new Intent(this, showRegMsg.class);
Bundle bundle = new Bundle();
for (int i = 0; i <sexGroup.getChildCount(); i++) {
RadioButton radioButton= (RadioButton) sexGroup.getChildAt(i);
if(radioButton.isChecked()) {
sex = radioButton.getText().toString();
break;
}
}
String str="";
for (int i = 0; i <cbox.length ; i++) {
if(cbox[i].isChecked()){
str=str+cbox[i].getText().toString()+"、";
}
}
if (str != ""){
str=str.substring(0, str.length() - 1);
}
hobby=str;
income = spinner.getSelectedItem().toString();
bundle.putString("usrn",username);
bundle.putString("pswd",password1);
bundle.putString("sex", sex);
bundle.putString("sr",income);
bundle.putString("ah",hobby);
bundle.putString("beizhu",addition);
UserInfo userinfo = new UserInfo();
userinfo.username=username;
userinfo.password=password1;
userinfo.sex=sex;
userinfo.income=income;
userinfo.hobby=hobby;
userinfo.addition=addition;
mHelper.insert(userinfo);
Toast.makeText(getApplicationContext(),"数据库写入成功",Toast.LENGTH_SHORT).show();
intent.putExtras(bundle);
startActivity(intent);
}else if (!password1.equals(password2)){
Toast.makeText(getApplication(),"密码不一致,请重新输入",Toast.LENGTH_SHORT).show();
}
}
(3)添加查询/删除页面和功能
复制SQLiteReadActivity到自己的项目
还有Layout里面的xml布局两个(主要是我懒,懒得自己写了
然后,开始改 SQLiteReadActivity.java。老规矩,先改import
设置离开activity时断开数据库连接,避免因数据库一致性无法写入新数据。
然后改一下要显示的条目:
简单读一下布局xml文件,发现用到了几个颜色,那就把他加进来,不然会报错。怎么加进来?复制粘贴,删掉重复项就好了。
然后,由于我的SQLiteReadActivity是复制粘贴来的,所以要在AndroidManifest.xml里面把它加进去,不然会闪退:
<activity
android:name=".SQLiteReadActivity"
android:exported="true"
tools:ignore="DuplicateActivity" />
然后,在zhuce_page加入查询按钮的Onclick方法:
再在xml中加个按钮:
(4)测试
很好,然后返回试试查询功能:
不错,再删除试试:
很好,功能都运行了。
结语
如果报错闪退,记得使用Android Studio自带的Logcat,闪退的时候会有红字记录,里面有报错的代码,方便debug
头都要秃了。
教材Demo代码:Activity_SQLiteDatabase.zip – 蓝奏云 (lanzoui.com)