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,都是结果集。使用方面也相似。