RecycleView+Recycle.Adapter<Holder>+SQLite增删改查+共享数据+IO流文件保存

首先是本地文件进行读写操作,具体实现如下:

               

 

 

通过文件字节输入输出流会把文件保存至data/data/files文件夹下面

 

 

 具体使用如下所示:

openFileOutput() 方法用于获取一个字节输出流对象,这个方法是Context对象所拥有的。MODE_PRIVATE这个常量表示该文件只能被创建它的APP进行读写操作

openFileInput()  方法用于获取一个字节输入流对象,使用方法和IO流一样,不赘述了。

SharePrefence在之前的章节讲过了,不说了。

接下来说一下RecycleView这个控件的使用,比ListView的适用性要高很多,并且强制性使用Holder类能够规范书写和提高效率。

首先需要导包,

 

 

 其次需要在活动中写一个RecycleView控件

 

先不说怎么setAdapter,先来介绍Recycle.Adapter类的使用

 

 

 注意这里Adapter里面用到了泛型,这个泛型类就是我们定义的继承自ViewHolder的类。

 

 

 在Adapter类里面书写完内部类之后,就需要重写三个方法,具体如下所示:

 

 

 第一个方法的作用是先从item.xml设置的每一项的布局控件提取出来,用view表示。然后把这个View传给Holder,Holder类里面的属性包括item里面定义的控件

我这里的item_recycler.xml文件只有两个TextView,所以我需要在Holder类里面声明出来这两个全局变量。然后通过view.findviewById去获取到每一个控件

第二个方法的作用是通过第一个方法返回的Holder类对象设置每一个控件的属性和格式。

第三个方法的作用是返回有多少个item的数量。

最后返回到我们的活动页面,用来给RecycleView控件setAdapter

 

 

 先获取到recyclerView的具体实例,然后这里需要注意,我们必须要给RecyclerView设置LayoutManager,也就是设置布局,六大布局都可以设置

LinearLayoutManager的构造方法有三个参数,第一个参数是上下文对象,第二个参数是选择水平还是垂直分布,第三个参数如果false就按照正序,true就按照倒序进行排序。

最后设置适配器即可,需要什么参数,就通过List集合传给Adapter类即可。

 

最后是使用SQLiteHelper这个类的继承类用来实现对数据库的增删改查操作。

上方的方法都是SQLiteDataBase对象才拥有的方法,SQLiteHelper只是为我们提供了一种更为便捷的方法提供SQliteDataBase对象的开关以及方法的执行的封装。

 

 

 为了防止DataBase对象的重复打开,我们这里采用单例模式,用来获取唯一的mHelper对象

 

 

 对于我们书写的SQLiteHelper的实现类的构造方法,对四个参数进行一一解释

第一个参数是上下文对象,第二个参数是我们的数据库的名字,第三个参数是游标的工厂,第四个参数是版本号,只要是大于等于1的整数都可以

 

 

 其次需要重写两个方法,onCreate和onUpgrade方法,onCreate方法用于第一次创建的时候使用,第二次发现该表已经存在了的话就不会再执行,表没了就会执行

onUpgrate用于更新数据库的时候使用,目前估计用不上(

 

 

 在做完准备工作之后,通过mhelper可以获取读连接和写连接。

其次我们就可以使用mDB对象执行sql语句或者执行增删改查的操作了。

mDB对象首先来介绍第一个方法,execSQL(String sql,Object[]);第一个参数用于传入sql语句,第二个参数用来传递sql语句需要的参数,

比如db.execSQL("insert into user(userName,passWord) values(?,?)"),我这里有两个问号,也就是两个占位符,所以我后面需要传递两个参数,注意不能使用基本数据类型,应该使用对应的包装类。注意:这个方法是没有返回值的,是void

接着是增加数据的方法,因为execSQl都能用,就不介绍上一个方法了。

insert(String table,String nullColumnHack,ContentValues values);第一个参数是我们的表名,第三个参数是类似于键值对的一个对象。具体使用如下:

 

 

 第一个参数是键,必须和字段名一致,第二个参数是字段名对应的值。

第二个参数的作用是,当我们的插入数据为空时,比如

insert into t_book (`name`,`author`,`price`,`sales`,`stock`,`img_path`) values (?,?,?,?,?,?)

 这里values括号里面如果没有值的话,显然是不允许的,这个时候我们就可以把一个列的名字传到第二个参数这里,给它的值设置为null,当然第二个参数也可以写成null

 接下来介绍删除方法

delete(String table,String whereClause,String []whereArgs) 返回值为删除的记录条数

第一个参数是表的名字,第二个参数是我们删除的条件,先放出一个标准的删除sql语句

"delete from t_book where id = ?";

 where后面的东西就是我们需要的条件,放到第二个参数的位置,如果不使用占位符,第三个参数填null就行

如果使用占位符,第三个参数应该提供每一个问号对应的参数值。

然后介绍更新的方法

比照sql语句看要好一些,

"update t_book set `name`=?,`author`=?,`price`=?,`sales`=?,`stock`=?,`img_path`=? where id = ?";

 

 最后是查询语句

 

 

 

null表示所有字段,这个要注意了。

 

 

 游标就是JDBC里面的ResultSet,都是结果集。使用方面也相似。

 

posted @ 2023-03-02 23:22  -她的梦-  阅读(54)  评论(0编辑  收藏  举报