安卓系统中的纸质数据库入门
数据库是存储在计算机系统中的有组织的数据集合。
在Android中,有几个数据库,如SQLite、Room、SQLDlight、Datastore、SharedPreferences和Realm数据库。
尽管大多数人认为所有的数据库都是由字段和记录组成的,但在纸上保存的数据库包含字段,没有记录。一个例子是电话簿,它没有每个人的记录。相反,它将字段作为数据库的主要元素。
前提条件
要跟上本教程,你需要。
- 了解Android开发的基础知识。
- 具备Kotlin编程语言的基本知识。
- 熟悉Kotlin Coroutines。
- 熟悉数据/视图绑定的概念。
目标
本教程旨在解释什么是Paper数据库,在哪里使用它,Paper DB的优点和缺点,以及如何在Android中实现它。
什么是Paper数据库?
PaperDB是一个类似NoSQL的数据库,用于Android上的Java/Kotlin对象,支持自动模式迁移。PaperDB的目标是为Android提供一个易于使用且快速的对象存储解决方案。
它允许用户使用Java/Kotlin类,无需任何注释、工厂方法或所需的类扩展。
从数据类中添加或删除字段也不再是一件苦差事,因为所有的数据结构变化都是自动处理的。
Paper数据库的优势
- 由于它只接受列数据,Paper数据库与其他数据库相比,消耗的内存较少。
- 它很容易实现。
- 它比其他数据库相对更快。
纸质数据库的劣势
- 纸质数据库中不能存储大量的信息。
- 从数据库中查询数据是一个问题,特别是分类数据。
何时使用纸质数据库
在以下情况下,纸质数据库是一个不错的选择。
- 保存微小的细节。
- 要存储的数据由字段组成。
开始使用
为了更好地理解Paper数据库的概念,我们将创建一个笔记应用程序,将笔记添加到数据库并显示在RecyclerView 。
第1步 - 创建一个新项目
启动Android Studio并创建一个新的空活动项目。给项目一个描述性的名字,并选择Kotlin作为首选开发语言。

第2步 - 添加依赖项
进入build.gradle (应用程序级别),在下面添加paper database 和Kotlin Coroutines的依赖项。
// paper database
implementation 'io.github.pilgr:paperdb:2.7.2'
// coroutines
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2'
第3步 - 创建用户界面
由于我们需要将数据插入数据库并显示出来,我们需要两个用户界面,一个用于插入数据,另一个用于显示数据。
它们看起来应该如下图所示。

在用户界面上显示数据
注意,你必须创建映射到RecyclerView的适配器和行项,才能显示数据。

步骤4 - 在应用类中初始化纸张
创建一个NoteApp 类,它继承了Application 类。重写onCreate 方法,并初始化Paper 数据库。
这应该在主线程中完成,如下所示。
class NoteApp: Application() {
override fun onCreate() {
super.onCreate()
Paper.init(this)
}
}
第5步--创建模型类
一个模型类定义了纸质数据库中的数据对象的名称和属性。我们在模型类中列出所有的基本数据。
在本例中,模型只是有两个属性,即纸条标题和纸条描述。
data class Note(
Val title: String? = null,
Val description: String? = null
)
第6步 - 将数据插入纸张数据库
定义一个ArrayList 变量,用来存放笔记。
private lateinit var noteList: ArrayList<Note>
在OnCreate 方法中,noteList被检查,如果它是空的,则初始化为一个空的ArrayList。
noteList = Paper.book().read("notes", ArrayList()) ?: ArrayList()
Read 方法用于从数据库中获取数据,而Write 方法用于向数据库中插入数据。
read() 和write() 方法是线程敏感的,必须在UI线程之外调用。由于这个原因,我们将在一个CoroutineScope 中执行插入。
binding.btnSave.setOnClickListener {
// check if the input fields are empty
if (binding.etTitle.text.isEmpty() && binding.etDescription.text.isEmpty()){
return@setOnClickListener
}
CoroutineScope(Dispatchers.IO).launch {
// adding data to the array list
val note = Note(binding.etTitle.text.toString(), binding.etDescription.text.toString())
noteList.add(note)
// inserting data to paper database
Paper.book().write("notes", noteList)
}
// navigating back
startActivity(Intent(this, MainActivity::class.java))
finish()
}
第7步--获取所有注释
read() 方法是用来从数据库中获取数据的,必须在UI线程之外调用。
CoroutineScope(Dispatchers.Main).launch {
// checks if the array list has data
notes = Paper.book().read("notes", ArrayList<Note>()) ?: ArrayList<Note>()
// submitting data to the adapter
notesAdapter.submitList(notes)
// setting data to the recyclerView
binding.noteRecycler.adapter = notesAdapter
}
第8步 - 删除所有笔记
为了执行删除操作,我们使用Paper库所提供的delete() 函数。这个函数接受key 作为输入,检查所提供的key 是否有任何值,然后执行该操作。
删除方法如下所示。
Paper.book().delete("notes")
演示
运行该应用程序后,你应该期望看到以下情况。




结论
在本教程中,我们讨论了什么是Paper数据库,它的优点和缺点,在哪里使用它,以及如何在Android中实现Paper数据库。