安卓系统中的纸质数据库入门教程

316 阅读4分钟

安卓系统中的纸质数据库入门

数据库是存储在计算机系统中的有组织的数据集合。

在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作为首选开发语言。

new project

第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步 - 创建用户界面

由于我们需要将数据插入数据库并显示出来,我们需要两个用户界面,一个用于插入数据,另一个用于显示数据。

它们看起来应该如下图所示。

insert data

在用户界面上显示数据

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

display data

步骤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")

演示

运行该应用程序后,你应该期望看到以下情况。

demo one

demo two

demo three

demo four

结论

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