话痨博主的碎碎念: 偷偷摸摸学了一下子SQLite,照猫画虎的应用在了自己的注册界面上。具体能完成的功能就是在注册界面键入新用户信息,然后通过简单的逻辑判断输入是否符合要求,若符合则存入到我们的user表中。
参考的链接放在前面:
界面如下:
在布局文件中:
这个界面在我们之前学习的基础上,要新学习的是Spinner这个控件。
在xml中很简单,只需要简单的放置这个控件:
<Spinner
android:id="@+id/question"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/question" />
然后我们需要的是让spinner有不同的选择,我们将他定义在question这个数组中:
找到string.xml文件,添加string array,再给这个string array 添加item即可。
在activity中:
在activity中,我们有两件事要完成:
- 简单判断键入数据是否符合要求
- 将新用户的数据存入到数据库
数据的简单判断我这里写的很简单,就是用户名不大于10个字符,密码大于6位,注册成功后跳转到登陆页面。
String name=username.getText().toString();
if(name.length()>10){
Toast.makeText(RegisterActivity.this, "用户名不能大于10位", Toast.LENGTH_SHORT).show();
return;
}
String psw=password.getText().toString();
if(psw.length()<6){
Toast.makeText(RegisterActivity.this, "密码不能小于6位", Toast.LENGTH_SHORT).show();
return;
}
String psw_check=confirmPsw.getText().toString();
if(!psw_check.equals(psw)){
Toast.makeText(RegisterActivity.this, "两次密码不一致!", Toast.LENGTH_SHORT).show();
password.setText("");
confirmPsw.setText("");
return;
}
Toast.makeText(RegisterActivity.this,"注册成功!欢迎您!", Toast.LENGTH_SHORT).show();
Intent intent=new Intent();
intent.setClass(RegisterActivity.this, loginActivity.class);
startActivity(intent);
然后就是将数据插入数据库了
从一开始到现在,我们还未建立过任何一个数据库
所以我们要先简单的使用sqlite建立我们第一个数据库
我将我数据库相关的文件都放在了utils包下:
目前只有三个文件:
- 第一个constant用于存放一些常量,比如说我们的数据库名、表名、表项名等等。目的在于后期对我们的数据项或者表名要做修改时,只需要修改这个常量值,而不必再去每一个文件中做修改。
public class constant {
public static final String DATABASE_NAME="info.db";//常量
public static final int DATABASE_VERSION=1;
public static final String TABLE_NAME="user";
public static final String USERNAME="username";
public static final String PASSWORD="password";
public static final String QUESTION="question";
public static final String QUESTION_ANS="questionAns";
}
- Dbmanager用于对我们的数据库操作做一个管理,如在增删改查的时候对我们的sql语句做一个简单的检查。
//数据库操作工具类
public class DbManager {
public static mySqlLiteHelper helper;
// 获得helper对象 之后才能对数据库操作
public static mySqlLiteHelper getIntance(Context context){
if(helper==null){
helper=new mySqlLiteHelper(context);
}
return helper;
}
public static void execSQL(SQLiteDatabase db,String sql){
if(db!=null){
if(sql!=null&&!"".equals(sql)){
db.execSQL(sql);
}
}
}
}
- mySqlLiteHelper继承SQLiteOpenHelper这个数据库帮助类。是我们对数据库进行创建的地方。
public class mySqlLiteHelper extends SQLiteOpenHelper {
public mySqlLiteHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
public mySqlLiteHelper(Context context) {
// TODO Auto-generated constructor stub
super(context,constant.DATABASE_NAME,null,constant.DATABASE_VERSION);
}
//数据库创建时回调
// db 数据库对象
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
Log.i("tag", "---------------oncreate---------------");
String sql="create table "+constant.TABLE_NAME+"("+constant.USERNAME+" varchar(10) primary key,"+constant.PASSWORD+" varchar(10) not null,"+constant.QUESTION+" varchar(10) not null,"+constant.QUESTION_ANS+" varchar(10) not null)";
db.execSQL(sql);
}
// 数据库版本更新时回调函数
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
}
// 打开时回调
@Override
public void onOpen(SQLiteDatabase db) {
// TODO Auto-generated method stub
Log.i("tag", "------------------onopen-------------------");
super.onOpen(db);
}
}
在此之后,我们需要在相应的registerActivity之中实现我们的数据库。
private mySqlLiteHelper helper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//将布局xml文件引入当前activity之中
setContentView(R.layout.activity_register);
init();
helper=DbManager.getIntance(this);
}
对应的onclick函数中做如下实现:
SQLiteDatabase db=helper.getWritableDatabase();//打开可写的数据库
String sql="insert into "+constant.TABLE_NAME+" values('"+name+"','"+psw+"','"+q+"','"+Ans+"')";//数据插入语句
db.execSQL(sql);//执行语句
db.close();//关闭数据库**不可省略
最后就是验证了:
运行我们的程序,在注册界面填写符合要求的数据。
然后我们来看一下我们的数据库有没有新增用户数据:
点击这个:
找到对应的安卓设备 data\data\对应项目名称\databases\
将我们的数据库文件(info.db)导出,在SQLite expert personal 中打开:
发现了我们新增了一条eeee用户的数据,完成简单的注册功能。