数据库也可以面向对象 --------litepal实现背单词功能

#效果预览
在这里插入图片描述
如上图所示,对解析的资源json文件解析后,存储到数据库当中,并且显示出来实现单词记忆的功能。

litepal

LitePal简介

LitePal 是一个Android开源库,它使开发者使用SQLite数据库变得非常容易。
你可以不用写一句SQL语句就可以完成大部分数据库操作,包括创建表,更新表,约束操作,聚合功能等等。LitePal的安装也相当简单,5分钟之内就可以将它集成到你的工程里。

LitePal采取的是对象关系映射(ORM)的模式,那么什么是对象关系映射呢?简单点说,我们使用的编程语言是面向对象语言,而我们使用的数据库则是关系型数据库,那么将面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是对象关系映射了。

对于习惯对象化编程的我们,在对晦涩难懂的SQL并不熟悉的情况下,使用这样一款框架,大大降低我们的开发难度。

LitePal使用方法

这里是郭霖大神的Litepal镜像地址:
郭霖大神的项目地址
这里简单总结一下,litePal的使用方法。

Litepal的配置

  • 引入Jar包或源码

jar包下载地址

在这里插入图片描述
下载后将文件复制到这里,
在这里插入图片描述
然后添加到Liibrary就OK了。

或者

 dependencies {
    implementation 'org.litepal.guolindev:core:3.2.3'
}

我这里第二种方法用不了,代码会标红,用第一种方法下载Jar包就可以用了

  • 在AndroidManifest.xml中:在这里插入图片描述
    这样做的目的是简化掉Context这个参数,只需要在AndroidManifest.xml中配置一下LitePalApplication,所有的数据库操作就都不用再传Context了。

  • 新建LitePal.xml文件
    在这里插入图片描述
    如果没有assets文件夹需要自己创建一个

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="WordBook" />
    <version value="1" />
    <list>
        <mapping class="com.example.testapp.database.Word" />
        <mapping class="com.example.testapp.database.Interpretation" />
        <mapping class="com.example.testapp.database.Phrase" />
        <mapping class="com.example.testapp.database.Sentence" />

    </list>
</litepal>

用于设定数据库的名字,用于设定数据库的版本号,用于设定所有的映射模型。

WordBook :数据库名
com.example.testapp.database.Word 用于创建表的Java文件。

建表

新建database文件夹,在其中创建Java文件。
在这里插入图片描述
以Word文件为例:

package com.example.testapp.database;

import org.litepal.crud.LitePalSupport;

public class Sentence extends LitePalSupport {

    // 英文句子
    private String enSentence;

    // 中文句子
    private String chsSentence;

    // 归属单词
    private int wordId;

    public int getWordId() {
        return wordId;
    }

    public void setWordId(int wordId) {
        this.wordId = wordId;
    }

    public String getEnSentence() {
        return enSentence;
    }

    public void setEnSentence(String enSentence) {
        this.enSentence = enSentence;
    }

    public String getChsSentence() {
        return chsSentence;
    }

    public void setChsSentence(String chsSentence) {
        this.chsSentence = chsSentence;
    }
}

上面说到Litpal采用的是对象关系映射(ORM)的模式,所以说我们就可以用面向对象的方法去进行对数据库的操作,对于建表,就是去建一个类,这个类继承自LitePalSupport,这个类里面的属性就对应着我们数据库的表头比如 wordId
可以看到,我们为很多属性写了set和get方法,这样我们会在查询的时候获取到Sentence对象,用这些方法就可以很方便地对这些数据进行读取和修改。

数据库的增删改查

这里以我的代码为例

        List<WordItem> jsonWordList = gson.fromJson(jsonContent, new TypeToken<List<WordItem>>() {}.getType());
        for (WordItem jsonWord : jsonWordList) {
            Log.i(TAG,jsonWord.getHeadWord());
            Word word = new Word();
            // 设置ID
            word.setWordId(jsonWord.getWordRank());
            // 设置单词
            word.setWord(jsonWord.getHeadWord());
            word.save();

jsonWordlist是我们解析json文件后的bean数据list,对其进行遍历,我们拿到了一条WordItem数据,把它存到我们建的表中也很简单,三步完成:

  • 新建对象
  • 添加数据
  • 保存数据
    如上代码,先new一个我们刚刚新建的word类,然后一一执行set方法,给word对象的属性进行赋值,这些值会自动被映射到数据库中。最后调用save()方法,保存数据即可。

查,改

查询数据也很简单

List<Word> words = LitePal.where("wordId = ?", + NowId + "").find(Word.class);

如上代码,我们用一个列表去接收查询的结果,即使我们确定查询的结果只有一个,

textWord.setText(words.get(0).getWord());

对列表中的对象使用我们刚刚写的get方法就可以获取到我们想要的值了,同样使用set方法对值进行修改。

删除表中的所有内容:

LitePal.deleteAll(Word.class);

删除指定内容:
如删除Id为1的内容。

LitePal.deleteAll(WordFolder.class, "id = ?", 1 + "");

背单词功能整体原理

整体框架图

OkHttp
Gson
LitePal
Litepal
服务器资源Json
Json文本
Java对象
SQLite数据库
UI界面

对于UI部分,我们在Activity中通过控制一个ID属性,就可以实现单词例句,翻译等变化。前面json解析的的部分已经在上一篇文章中讲解:
解析云端Json文件到本地Java对象

单词读音的实现

使用MediaPlayer类实现音频播放,音频资源来自于API,带上参数,MediaPlayer的setDataSource方法就可以获取到音频资源:MediaPlayer的使用这里就不再赘述了。

// 有道英音发音
public static final String YOU_DAO_VOICE_EN = "https://dict.youdao.com/dictvoice?type=1&audio=";

// 有道美音发音
public static final String YOU_DAO_VOICE_USA = "https://dict.youdao.com/dictvoice?type=0&audio=";


代码

代码在我的个人项目地址里可以查看:

😽作者:勇敢di牛牛
🚀个人项目地址:englishlearningapp
个人简介:有一年工作经验的大学生。
工作:汽车系统应用开发(阿里集团)
个人网站:牛牛の小窝
🚏独学而无友,则孤陋而寡闻

再分享郭霖老师的一句话:

每当你在感叹 如果有这样一个东西就好了的时候 请注意 其实这是你的机会

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勇敢di牛牛

你必飞黄腾达,耶稣也拦不住。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值