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

完善注册功能

由于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
这里写图片描述
然后选择设备,如果出现绿条就代表调试通过了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt提供了一批SQLite工具类,允许我们使用SQLite数据库。这些工具类可以方便我们完成SQLite数据库的操作,其功能包括SQLite数据库创建和删除、表的创建和删除、向表中插入数据、查询和更新数据等。 Qt提供了许多与SQLite相关的类,其中包括QSqlDatabase、 QSqlQuery、QSqlTableModel和QSqlRecord等。其中,使用QSqlDatabase可以连接到SQLite数据库,并创建、打开、关闭和删除数据库。而使用QSqlQuery类,我们可以执行SQL语句,例如插入、删除、更新和查询等,还可以调用其API来获取结果中的数据。 另外,QSqlTableModel类允许我们使用Qt的Model/View框架来管理数据库表,与之相关的还有QSqlRecord类,我们可以使用这个类来处理行中的数据。这种方式使得操作数据表变得十分方便,还能自动完成表中数据的排序和过滤等操作。 总之,Qt提供的SQLite工具类在使用SQLite数据库进行开发时非常有用。通过这些工具类,我们可以方便地管理SQLite数据库和表,完成多种操作,从而提高我们的代码效率和开发效率。 ### 回答2: SQLite是一个轻量级的关系型数据库,用于在嵌入式设备和移动设备中存储和管理数据。Qt是一个跨平台的应用程序开发框架,提供了许多工具类和API,可以用于开发各种类型的应用程序。Qt提供了许多与SQLite集成的工具类,以便在Qt应用程序中使用SQLite数据库。 Qt的SQLite工具类提供了一种简单、易于使用的方法来访问SQLite数据库。这些类可以帮助您轻松地执行各种操作,如打开和关闭数据库、执行查询和更新查询结果等。以下是一些常用的Qt SQLite工具类: 1. QSqlDatabase - 用于打开和关闭数据库连接的类。它提供了一种简单的方法来配置和连接到SQLite数据库。 2. QSqlQuery - 用于执行SQL查询并处理查询结果的类。它可以执行各种类型的SQL语句,如SELECT、INSERT、UPDATE、DELETE等。 3. QSqlTableModel - 用于管理表格的类。它可以连接到SQLite数据库中的数据表,并允许访问表格的数据、添加新数据、删除数据以及更新数据。 4. QSqlRelationalTableModel - 用于管理关系表格的类。它与QSqlTableModel类似,但可以处理两个或多个表之间的关系数据。 这些Qt SQLite工具类提供了一种简单、便捷的方法来访问和处理SQLite数据库。通过它们,可以轻松地执行各种操作,并快速地编写出高效、可靠的Qt应用程序。无论您是在嵌入式设备、移动设备还是桌面设备上开发应用程序,Qt的SQLite工具类都是非常有用的。 ### 回答3: Qt是一个跨平台应用程序开发框架,包括大量的类库和工具,其中也包括了对SQLite数据库的支持。Qt SQLite工具类就是一组对SQLite数据库进行操作的工具类,可以用来完成各种数据库操作。 使用Qt SQLite工具类可以方便地实现创建、打开、关闭、查询、修改、删除等常用操作。具体操作包括:初始化SQLite数据库创建数据库文件,打开和关闭数据库文件,执行SQL语句,插入、更新和删除记录,查询记录集,事务处理等。 Qt SQLite工具类具有易用性、跨平台性、高效性、可维护性等优点。在开发过程中,多采用类和对象的方式进行编程,这样方便了代码的重用和维护。通过使用Qt SQLite工具类,开发者可以简化程序的开发、测试和维护工作,提高开发效率,减少开发成本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值