跟着郭霖大神的《第一行代码》学习Android半年,很早就跟着书敲过LitePal这个框架的使用代码,但当时不知道LitePal已更新到了现在的3.0版本,而是按着书上的1.4版本敲,导致过程中遇到了很多问题,最终只有放弃那一节的内容。
但是最近做的项目中需要使用到SqLite,所以只有从0开始,自我摸索,这里记录一下自己使用LitePal的方法和遇到的坑,便于以后查看
在学习LitePal的时候写过一个小Demo
LitePal小应用
里面是LitePal的基本使用方法
下面是在项目中使用LitePal
1. 由于项目中已经自定义过Application
,所以我不能在manifests.xml
中定义android:name="org.litepal.LitePalApplication"
让我的自定义Application继承了LitePalApplication
(因为LitePalApplication也是继承自Application,所以没什么影响)
2. 然后创建litepal.xml
文件
在创建这个xml文件的时候,遇到
Process: com.example.familyeducationhelp, PID: 16393 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.familyeducationhelp/com.example.familyeducationhelp.Activity.MyAccountActivity}: org.litepal.exceptions.DatabaseGenerateException: can not find a class named com.example.familyeducationhelp.ClassList.MyAccountActivity
在网上找了很多办法,都说的是我的变量名和SQL的关键字冲突了,我就一个一个的改变量名,结果还是报这个错。
最后慢慢看代码,发现原来是litepal.xml
中的表名写错了,这个xml中,应该放的是一个实体类,但是我放的是一个Activity,所以就一直报这个错(可见细心是有多重要)
3. 在使用LitePal的时候,每次进入该活动都需要在数据库中拿数据,所以在初始化数据的时候mList = LitePal.findAll(实体类.class);
然后根据mList.size()
去判断数据库里面是否为null,这时可根据自己的逻辑去判断该是赋初值,或者是赋从数据库中拿出来的值(使用LitePal.find(实体类.class,2);
)
4. 数据库的信息拿出来之后,需要用recyclerview
或者listview
展示,之前我修改我的信息后,发现数据库中的值变了,但是展示出来的view并没变
后来发现我是将List中每一项都用一个实体类对象去代替了,便于操作,所以每次改变的只是实体类对象的值,而view的展示,需要用到List中的值,所以需要使用mList.set(id,实体类对象)
去替换掉List中对应的数据