完善注册功能,编写本地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
然后选择设备,如果出现绿条就代表调试通过了
相关文章推荐
- iOS实战演练之关于数据交互的问题(利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能)
- node.js用户注册功能的完善
- 2、编写单元测试用例,对用户注册功能的DAO层进行测试。(注意:测试用例应考虑成功和失败的情况)
- ios - 自动布局框架编写(更多功能完善中)
- springMVC+Java验证码完善注册功能
- 完善注册新用户功能
- 【java】注册功能动态验证码的生成和验证(完整图片验证码封装工具类)
- springMVC+Java验证码完善注册功能
- 做一款app,除了最基本的本地功能以外,好需要一些这些功能(待完善)
- 登录,注册,修改密码,倒计时工具类编写
- java本地实现注册邮件激活功能
- intelliJ IDEA 编写邮箱注册功能报错 AddressException
- 功能完善的 jquery validator 完成用户注册的验证
- 自己编写的一个Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加载对象
- springMVC+Java验证码完善注册功能
- 自己编写的一个Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加载对象
- JavaEE_POI导出Excel (网络下载) +(本地导出) 工具类的编写
- Android SharedPreferences应用 实现本地注册登陆 功能简单易懂(实例)
- 验证码注册[置顶] springMVC+Java验证码完善注册功能
- Hibernate 工具类(个人编写,初次了解,还未完善)