#效果预览
如上图所示,对解析的资源json文件解析后,存储到数据库当中,并且显示出来实现单词记忆的功能。
litepal
LitePal简介
LitePal 是一个Android开源库,它使开发者使用SQLite数据库变得非常容易。
你可以不用写一句SQL语句就可以完成大部分数据库操作,包括创建表,更新表,约束操作,聚合功能等等。LitePal的安装也相当简单,5分钟之内就可以将它集成到你的工程里。
LitePal采取的是对象关系映射(ORM)的模式,那么什么是对象关系映射呢?简单点说,我们使用的编程语言是面向对象语言,而我们使用的数据库则是关系型数据库,那么将面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是对象关系映射了。
对于习惯对象化编程的我们,在对晦涩难懂的SQL并不熟悉的情况下,使用这样一款框架,大大降低我们的开发难度。
LitePal使用方法
这里是郭霖大神的Litepal镜像地址:
郭霖大神的项目地址
这里简单总结一下,litePal的使用方法。
Litepal的配置
- 引入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 + "");
背单词功能整体原理
整体框架图
对于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
个人简介:有一年工作经验的大学生。
工作:汽车系统应用开发(阿里集团)
个人网站:牛牛の小窝
🚏独学而无友,则孤陋而寡闻
再分享郭霖老师的一句话:
每当你在感叹 如果有这样一个东西就好了的时候 请注意 其实这是你的机会