android备忘录实现,使用ObjectBox数据库框架进行数据存储,增删改查等操作。代码使用kotlin编写。

1、下面看看ObjectBox数据库封装

需要注意的是:

   /**      * 你只有配置好之后, 点击 Make Model '你的model名字', 才会创建 MyObjectBox对象      * 对于MyObjectBox的包名, 目前我发现的是找到第一个Entity的包名      * 如果项目使用了Kotlin, 必须添加插件apply plugin: 'kotlin-kapt'      * 实体Entity是不能继承的哦.继承的字段不会被解析      */

package com.mmsx.note.app

import android.content.Context

import android.util.Log

import com.elvishew.xlog.XLog

import com.mmsx.note.entity.MyObjectBox

import com.mmsx.note.entity.NoteEntity

import com.mmsx.note.entity.NoteEntity_

import io.objectbox.Box

import io.objectbox.BoxStore

import io.objectbox.android.AndroidObjectBrowser

import io.objectbox.android.BuildConfig

object ObjectBox {

lateinit var boxStore: BoxStore

private set

/**

* 你只有配置好之后, 点击 Make Model '你的model名字', 才会创建 MyObjectBox对象

* 对于MyObjectBox的包名, 目前我发现的是找到第一个Entity的包名

* 如果项目使用了Kotlin, 必须添加插件apply plugin: 'kotlin-kapt'

* 实体Entity是不能继承的哦.继承的字段不会被解析

*/

fun init() : BoxStore{

boxStore = MyObjectBox.builder()

.androidContext(NoteApplication.instance.applicationContext)

.build()

if (BuildConfig.DEBUG) {

val started = AndroidObjectBrowser(boxStore).start(NoteApplication.instance)

XLog.d("ObjectBrowser", "Started: $started")

}

return boxStore

}

/**

* 重启数据库

* 删除本地数据库后,需要重新创建

*/

fun restartBoxStore(){

boxStore = MyObjectBox.builder().androidContext(NoteApplication.instance).build()

}

/**

* 添加数据

*/

fun addData(o: NoteEntity): Long {

try {

if (boxStore != null && !boxStore.isClosed) {

boxStore.boxFor(NoteEntity::class.java).put(o)

}

} catch (e: Throwable) {

Log.d("lyy", "error:${e.printStackTrace()}")

}

return 0

}

/**

* 更新数据(如果直接插入更新的对象,有些字段没有值会覆盖掉)

* 1、先查询到数据

* 2、对查询到的数据字段进行更新

* 3、查询不到,直接插入

*/

fun updateData(o: NoteEntity) {

try {

if (boxStore != null && !boxStore.isClosed) {

//1、先查询到数据

val box: Box = boxStore.boxFor(NoteEntity::class.java)

val list: MutableList = box.query().equal(NoteEntity_.id, o.id).build().find()

var localBean = list.getOrNull(0)

//2、对查询到的数据字段进行更新

localBean?.let {

localBean.title = o.title

localBean.content = o.content

localBean.updatedAt = o.updatedAt

boxStore.boxFor(NoteEntity::class.java).put(localBean)

}?: kotlin.run {

//3、查询不到,直接插入

ObjectBox.boxStore.boxFor(NoteEntity::class.java).put(o)

}

}

} catch (e: Throwable) {

Log.d("lyy", "error:${e.printStackTrace()}")

}

}

/**

* 获取全部对象数据

*/

fun getNoteEntityAllData(): MutableList? {

try {

if (boxStore != null && !boxStore.isClosed) {

val box: Box = boxStore.boxFor(NoteEntity::class.java)

return box.all

}

} catch (e: java.lang.Exception) {

}

return ArrayList()

}

/**

* 条件查询

*/

fun getNoteEntityData(title : String): List? {

try {

if (boxStore != null && !boxStore.isClosed) {

val box: Box = boxStore.boxFor(NoteEntity::class.java)

return box.query().equal(NoteEntity_.title, title).build().find()

}

} catch (e: java.lang.Exception) {

}

return ArrayList()

}

/**

* 查询单个数据

*/

fun getNoteEntity(id: Long): NoteEntity? {

try {

if (boxStore != null && !boxStore.isClosed) {

val box: Box = boxStore.boxFor(NoteEntity::class.java)

return box[id]

}

} catch (e: java.lang.Exception) {

}

return null

}

/**

* 删除数据单个数据1

*/

fun deleteNoteEntityData(id: Long): Boolean {

try {

if (boxStore != null && !boxStore.isClosed) {

val box: Box = boxStore.boxFor(NoteEntity::class.java)

return box.remove(id)

}

} catch (e: java.lang.Exception) {

}

return false

}

/**

* 删除数据单个数据2

*/

fun deleteData(o: Any, clazz: Class?) {

try {

if (boxStore != null && !boxStore.isClosed) {

val box: Box = boxStore.boxFor(clazz)

box.remove(o)

}

} catch (e: java.lang.Exception) {

}

}

}

2、主页面数据展示代码

使用kotlin代码编写,加上其他框架就是简洁啊

class MainActivity : ScopedAppActivity(){

private var adapter : NoteAdapter ? = null

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

initView()

}

private fun initView() {

adapter = NoteAdapter()

main_note_recycler_view.layoutManager = LinearLayoutManager(this)

main_note_recycler_view.adapter = adapter

adapter?.setOnItemChildClickListener { adapter, view, position ->

var intent = Intent(this, ShowNoteActivity::class.java).apply {

putExtra("entity", adapter?.data?.get(position) as NoteEntity)

}

startActivity(intent)

}

main_add_view.setOnClickListener {

startActivity(Intent(this, NoteActivity::class.java))

}

main_menu_view.setOnClickListener {

startActivity(Intent(this, SettingActivity::class.java))

}

}

override fun onResume() {

super.onResume()

val data = getNoteEntityAllData()

adapter?.setNewData(data)

if (data?.size == 0) {

main_empty_view.visibility = View.VISIBLE

}else{

main_empty_view.visibility = View.GONE

}

}

class NoteAdapter : BaseQuickAdapter(R.layout.item_main_note) {

override fun convert(helper: BaseViewHolder, item: NoteEntity?) {

helper.setText(R.id.item_main_note_title_view, item?.title)

.setText(R.id.item_main_note_content_view, item?.content)

.setText(R.id.item_main_time_content_view, TimeUtils.date2String(item?.createdAt?.let {

Date(

it

)

},"yyyy/MM/dd HH:mm"))

.addOnClickListener(R.id.item_main_note)

}

}

}

2、数据添加和更新页面

class NoteActivity : ScopedAppActivity(){

private var entity : NoteEntity ?= null

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_note)

entity = this.intent.extras?.getSerializable("entity") as NoteEntity?

initView()

}

private fun initView() {

if (entity != null) {

note_title_view.text = "编辑"

note_title_edit_view?.setText(entity?.title)

note_content_edit_view.setText(entity?.content)

}

note_done_view.setOnClickListener {

if (entity == null) {

entity = NoteEntity()

entity?.title = note_title_edit_view.text.toString()

entity?.content = note_content_edit_view.text.toString()

entity?.createdAt = System.currentTimeMillis()

entity?.updatedAt = System.currentTimeMillis()

ObjectBox.addData(entity!!)

}else{

entity?.title = note_title_edit_view.text.toString()

entity?.content = note_content_edit_view.text.toString()

entity?.updatedAt = System.currentTimeMillis()

ObjectBox.updateData(entity!!)

}

finish()

}

note_back_view.setOnClickListener {

finish()

}

}

}

3、部分界面展示

精彩文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。