我的编程空间,编程开发者的网络收藏夹
学习永远不晚

每天学习一个Android中的常用框架——1.Litepal

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

每天学习一个Android中的常用框架——1.Litepal

文章目录1.简介2.特性3.演示3.1 集成3.2 配置3.3 创建数据库3.4 升级数据库3.5 插入数据3.6 查询数据3.7 更新数据3.8 删除数据4.版本异同5.源码地址 1.简介

Litepal——作为带我入行的第一本教学书籍《Android第一行代码》的作者郭霖老师所写出来的持久化框架,几乎算是我接触Android世界之后第一个遇到的框架,故将该框架列为一系列学习框架博客的首位。
根据Litepal的GitHub主页:Litepal,可以看到该框架的一些简介:

LitePal is an open source Android library that allows developers to use SQLite database extremely easy. You can finish most of the database operations without writing even a SQL statement, including create or upgrade tables, crud operations, aggregate functions, etc. The setup of LitePal is quite simple as well, you can integrate it into your project in less than 5 minutes.

事实上,正如这段简介所说,集成Litepal相当简单,不需要超过五分钟时间。使用Litepal,也适合对sql语言还不熟悉的开发者快速上手。

2.特性

让我们继续浏览Litepal的GitHub主页,可以发掘Litepal的一些特性:

Using object-relational mapping (ORM) pattern. Almost zero-configuration(only one configuration file with few properties). Maintains all tables automatically(e.g. create, alter or drop tables). Multi databases supported. Encapsulated APIs for avoiding writing SQL statements. Awesome fluent query API. Alternative choice to use SQL still, but easier and better APIs than the originals. More for you to explore.

用大白话来描述的话,可以列举如下:

Litepal使用了ORM(对象关系映射)模型 Litepal几乎是无配置的,仅需极少的配置文件 Litepal几乎包括所有的CRUD操作,也支持多张表格的操作 Litepal可以仅调用api进行CRUD操作而避免编写sql语句

总之,看到Litepal具有这么多良好的特性,读者是否心动了呢。理论的话不多说,我们现在就开始正式地使用Litepal进行数据库的相关操作
PS:如果有曾经学习过Java的ORM框架——Mybatis的读者,应该不会对Litepal的使用太陌生,因为它们都使用了xml文件进行相应的配置

3.演示 3.1 集成

现在Android框架的集成相比于IDE还为ADT的时代,要方便了许多。原因是现在的主流IDE是Android Studio,而AS默认使用了Gradle进行版本的配置管理,这让集成框架变得简单了许多。
在build.gradle下,添加以下语句,然后重新sync,即可将Litepal集成到你的项目中:

implementation 'org.litepal.android:java:3.0.0'

当然,目前Android的主流开发语言,除了Java之外,还有Kotlin,Litepal同样具有Kotlin版本的(这里的演示仅针对Java,Kotlin版本的异曲同工)依赖:

implementation 'org.litepal.android:kotlin:3.0.0'

可以根据个人需求进行配置。

3.2 配置

集成了Litepal之后,要想正式使用它还需要进行一些配置

在assets目录下新建litepal.xml,作为Litepal的全局配置文件,相应的条目信息已作出注释,代码如下:

    
    
    
    
    <!--  -->
在你的应用下配置Litepal,有两种方式可以实现: 修改清单文件,将你的应用名修改为:
android:name="org.litepal.LitePalApplication"
新建一个自己写的MyOwnApplication类,然后将清单文件中的应用名定位到该类,即:
android:name="com.example.MyOwnApplication"
,然后再编写MyOwnApplication类,代码如下:
public class MyOwnApplication extends Application {
@Override
public void onCreate() {
    super.onCreate();
    LitePal.initialize(this);
}
...
}

两种方式亦可,Litepal的作者建议若使用第二种方式,需要尽快地调用

LitePal.initialize(this);
所以将其放在
onCreate()
方法是最好的。

3.3 创建数据库

刚才在介绍的时候已经说过,Litepal采取的是对象关系映射(ORM)的模式,那么什么是对象关系映射呢?简单点说,我们使用的编程语言是面向对象语言,而使用的数据库则是关系型数据库,那么将面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是对象关系映射了。
不过你可千万不要小看对象关系映射模式,它赋予了我们一个强大的功能,就是可以用面向对象的思维来操作数据库,而不用再和SQL语句打交道了,不信的话我们现在就来体验一下。像往常使用SQLiteOpenHelper类,为了创建一张Book表需要先分析表中应该包含哪些列,然后再编写出一条建表语句,最后在自定义的SQLiteOpenHelper中去执行这条建表语句。但是使用LitePal,你就可以用面向对象的思维来实现同样的功能了,定义一个Book类,代码如下所示:

package com.androidframelearn.dao_litapal;
import org.litepal.crud.LitePalSupport;
public class Book extends LitePalSupport {
    private int id;
    private String author;
    private double price;
    private int pages;
    private String name;
    public int getId(){
        return id;
    }
    public void setId(int id){
        this.id = id;
    }
    public String getAuthor(){
        return author;
    }
    public void setauthor(String author){
        this.author = author;
    }
    public double getPrice(){
        return price;
    }
    public void setPrice(double price){
        this.price = price;
    }
    public int getPages(){
        return pages;
    }
    public void setPages(int pages){
        this.pages = pages;
    }
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
}

这是一个典型的Java bean,在Book类中我们定义了 id、author,price, pages,name这几个字段,并生成了相应的getter和setter方法。相应你已经能猜到了,Book类就会对应数据库中的Book表,而类中的每一个字段分别对应了表中的每一个列,这就是对象关系映射直观的体验,现在你能够理解得更加清楚了吧。
接下来我们还需要将Book类添加到映射模型列表当中,修改litepal.xml中的代码,如下所示:


    
    
    
    
    <!--  -->

这里使用标签来声明我们要配置的映射模型类,注意一定要使用完整的类名。不管有多少模型类需要映射,都使用同样的方式配置在标签下即可。
没错,这样就已经把所有工作都完成了,现在只要进行任意一次数据库的操作,BookStore.db数据库应该就会自动创建出来。为了更好地演示代码,我们将布局文件所需要的功能一次性编写好,activity_main.xml代码如下:


    

该布局效果如图所示:
<!-- -->

重新运行一下程序,再次创建数据库,就可以完美地完成数据库的升级了。这里的调试可以使用sqlite工具,这里不再赘述。

3.5 插入数据

在讲述本节时,首先回顾一下之前添加数据的方法,我们需要创建出一个Contentvalues对象,然后将所有要添加的数据put到这个Contentvalues对象当中,最后再调用SQLiteDatabase的insert() 方法将数据添加到数据库表当中,步骤相当繁琐。
而使用LitePal来添加数据,这些操作可以简单到让你惊叹!我们只需要创建出模型类的实例,再将所有要存储的数据设置好,最后调用一下save()方法就可以了。
同样地,修改MainActivity,增加插入数据的事件方法,代码如下:

private void insertDatabyLitePal() {
        btn_db_insert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Book book = new Book();
                book.setName("The Da Vinci Code");
                book.setauthor("Dan Brown");
                book.setPages(454);
                book.setPrice(16.96);
                book.save();
                Log.i(TAG,"插入数据成功");
            }
        });
    }

同样运行程序,查看控制台,如图所示:
在这里插入图片描述
当点击查询数据(下一节将介绍该逻辑)时,控制台打印刚刚插入的数据,如图所示:
在这里插入图片描述

3.6 查询数据

使用Litepal同样可以很轻易地查询数据,当然了,由于篇幅限制,这里仅仅贴出最简单的查询方式,至于关联查询等稍复杂的查询方式,可以去GItHub上参考Litepal的官方文档进行相关调用即可。
同样地,修改MainActivity,增加查看数据的事件方法,代码如下:

private void queryDatabyLitePal() {
        btn_db_query.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                List books = LitePal.findAll(Book.class);
                for (Book book : books){
                    Log.i(TAG,"查询数据成功");
                    Log.d("MainActivity","书名是"+book.getName());
                    Log.d("MainActivity","书的作者是"+book.getAuthor());
                    Log.d("MainActivity","书的页数是"+book.getPages());
                    Log.d("MainActivity","书的价格是"+book.getPrice());
                }
            }
        });
    }

相关的运行结果上一小节以贴出,这里不再重复。

3.7 更新数据

更新数据要比添加数据稍微复杂一点,因为它的API接口比较多,这里我们只介绍最常用的几种更新方式。
首先,最简单的一种更新方式就是对已存储的对象重新设值,然后重新调用save()方法即可。那么这里我们就要了解一个概念,什么是已存储的对象?
对于LitePal来说,对象是否已存储就是根据调用

model.isSaved()
方法的结果来判断的, 返回true就表示已存储,返回false就表示未存储。那么接下来的问题就是,什么情况下会返回true,什么情况下会返回false呢?
实际上只有在两种情况下
model.isSave()
方法才会返回true, 一种情况是已经调用过model. save()方法去添加数据了,此时model会被认为是已存储的对象。另一种情况是model对象是通过LitePal提供的查询API查岀来的,由于是从数据库中查到的对象,因此也会被认为是已存储的对象。
由于查询API相对复杂,因此只能先通过第一种情况来进行验证。修改MainActivity中的代码,如下所示:

private void updateDatabyLitePal() {
        btn_db_update.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Book book = new Book();
                book.setName("The Lost Symbol");
                book.setauthor("Dan Brown");
                book.setPages(510);
                book.setPrice(19.95); // 第一次设置商品价格
                book.save();
                book.setPrice(10.99); // 第二次设置商品价格
                book.save();
                Log.i(TAG,"更新数据成功");
            }
        });
    }

可以看到,我们做了跟插入数据类似的事情,但是我们对数据的价格进行了设置,运行程序,如图所示:
原创文章 269获赞 77访问量 6万+ 关注 私信 展开阅读全文
作者:赈川


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

每天学习一个Android中的常用框架——1.Litepal

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

每天学习一个Android中的常用框架——1.Litepal

文章目录1.简介2.特性3.演示3.1 集成3.2 配置3.3 创建数据库3.4 升级数据库3.5 插入数据3.6 查询数据3.7 更新数据3.8 删除数据4.版本异同5.源码地址 1.简介 Litepal——作为带我入行的第一本教学书籍《
2022-06-06

每天学习一个Android中的常用框架——4.OkIo

文章目录1.简介2.特性3.演示3.1 集成3.2 配置3.3 布局文件和URL封装3.4 POST请求提交键值对3.5 POST请求提交字符串3.6 POST请求提交文件3.7 POST请求提交表单4.源码地址 1.简介 在上一篇博客中,
2022-06-06

每天学习一个Android中的常用框架——5.Retrofit

文章目录1.简介2.特性3.演示3.1 集成3.2 配置3.3 布局文件和URL封装3.5 GET请求——传统网络参数3.6 GET请求——RestFul风格3.7 POST请求4.源码地址 1.简介 在介绍Android中相关网络框架的时
2022-06-06

每天学习一个Android中的常用框架——6.ButterKnife &amp; Zelezny

文章目录1.简介2.特性3.演示3.1 集成3.2 布局文件和资源文件3.3 ButterKnife的主要功能3.3.0 使用准备3.3.1 View注入3.3.2 资源绑定3.3.3 点击事件绑定3.4 Zelezny4.源码地址 1.简
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录