您的位置:首页 > 数据库

完善注册功能,编写本地SQLite数据库的工具类

2017-08-07 11:24 489 查看

完善注册功能

由于firebase的用户身份认证功能不支持保存更多的用户信息,所以我们需要自己在firebase的数据库中保存用户信息

首先修改UI



然后在本地判断输入信息是否合法,在这里只需要两次输入的密码相同,年龄大于0,昵称不为空就行了

if(!password.equals(password_repeat)){
UIUtils.makeToast(getString(R.string.reg_password_check_failed),this);
return;
}

if(name.equals("") || age<=0){
UIUtils.makeToast(getString(R.string.reg_cannot_empty),this);
return;
}


接着添加在数据库相应位置写入数据的代码

String id=mAuth.getCurrentUser().getUid();
DatabaseReference userRef=mDb.getReference().child("users").child(id);
userRef.setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Toast.makeText(RegActivity.this,getString(R.string.reg_succeed),Toast.LENGTH_SHORT).show();
startActivity(new Intent(RegActivity.this,UserCenterActivity.class));
RegActivity.this.finish();
}else{
Toast.makeText(RegActivity.this,getString(R.string.reg_failed),Toast.LENGTH_SHORT).show();
}
}
});


并配置好数据库访问权限

{
"rules": {
"users":{
"$uid":{
".read": "$uid == auth.uid",
".write": "$uid == auth.uid"
}
}
}
}


并在用户中心窗口中添加显示用户昵称的代码以表示数据添加成功

mDb=FirebaseDatabase.getInstance();
mRefUser=mDb.getReference().child("users").child(mUser.getUid());
final AlertDialog dlg=UIUtils.createDialog(getString(R.string.loading),this);
mRefUser.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
user=dataSnapshot.getValue(User.class);
tv_name.setText(getString(R.string.welcome)+"\n"+user.getName());
dlg.dismiss();
}

@Override
public void onCancelled(DatabaseError databaseError) {
dlg.dismiss();
}
});


编写本地SQLite数据库工具类

当日程添加完毕后会在本地存储,然后根据用户的需求来决定是否备份到云端

首先编写一个类,继承自SQLiteOpenHelper,实现抽象方法

public class ScheduleDbUtils extends SQLiteOpenHelper{

public static final String TABLE_NAME="schedules";

public ScheduleDbUtils(Context context, SQLiteDatabase.CursorFactory factory) {
super(context, "schedules", factory, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE "+TABLE_NAME+" (s_id VARCHAR,s_date DATE,s_time TIME,s_who VARCHAR,s_level INT,s_more VARCHAR)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
....


再新建一个用于封装日程的类,然后编写增删改查的函数

public void insert(Schedule schedule){
SQLiteDatabase db=getWritableDatabase();
ContentValues values=new ContentValues();
values.put("s_id", schedule.getId());
values.put("s_date",schedule.getDate());
values.put("s_time",schedule.getTime());
values.put("s_who",schedule.getWho());
values.put("s_level",schedule.getLevel());
values.put("s_more",schedule.getMore());
db.insert(TABLE_NAME,null,values);
}

public void delete(String id){
SQLiteDatabase db=getWritableDatabase();
if(id==null){
db.delete(TABLE_NAME,null,null);
}else{
String whereClause = "s_id=?";
String[] whereArgs = {id};
db.delete(TABLE_NAME,whereClause,whereArgs);
}

}

public void update(Schedule schedule,String id){
SQLiteDatabase db=getWritableDatabase();

ContentValues values=new ContentValues();
values.put("s_date",schedule.getDate());
values.put("s_time",schedule.getTime());
values.put("s_who",schedule.getWho());
values.put("s_level",schedule.getLevel());
values.put("s_more",schedule.getMore());
String whereClause = "s_id=?";
String[] whereArgs = {id};

db.update(TABLE_NAME,values,whereClause,whereArgs);
}

public List<Schedule> select(String id) {
SQLiteDatabase db = getReadableDatabase();
List<Schedule> result = new ArrayList<>();
Cursor cursor;
if (id == null) {
cursor = db.query(TABLE_NAME, null, null, null, null, null, null);
} else {
String whereClause = "s_id=?";
String[] whereArgs = {id};
cursor = db.query(TABLE_NAME, null, whereClause, whereArgs, null, null, null);
}

if (cursor.moveToFirst()) {
for (int i = 0; i < cursor.getCount(); i++) {
cursor.move(i);
id=cursor.getString(0);
String date=cursor.getString(1);
String time=cursor.getString(2);
String who=cursor.getString(3);
int level=cursor.getInt(4);
String more=cursor.getString(5);
Schedule schedule=new Schedule(id,date,time,who,more,null,level);
result.add(schedule);
}
}
return result;
}


进行AndroidUnit测试

首先在androidTest包下新建一个用于测试的类DbTest



在类的定义前面加上

@RunWith(AndroidJUnit4.class)



写好用于测试的代码,并在函数前加上@Test(这里仅以测试添加为例)

@Test
public void testInsert() throws Exception{
Context appContext = InstrumentationRegistry.getTargetContext();
ScheduleDbUtils db=new ScheduleDbUtils(appContext,null);
Schedule schedule=new Schedule(RandomUtils.getRandomId(),"2017-1-1","12:30","I","MORE",null,1);
schedule.setId("86400874-5d4a-4acb-8605-4515e89735c7");
db.insert(schedule);
}


然后右键文件,点击Run DbTest



然后选择设备,如果出现绿条就代表调试通过了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐