Room增删改查,真香!,vivoandroid面试

instance=this
}
}
}
}

Repository

object Repository {

val bookDao:BookDao=AppDatabase.getDatabase(MyApp.context).bookDao()

//查询所有
fun loadAllBook():LiveData<List>{
return bookDao.loadAllBook()
}

//修改图书价格
fun updateBookPrice(name:String,id:Long){
bookDao.updateBookPrice(name,id)
}

//添加图书
fun insertBook(book: Book):Long{
return bookDao.insertBook(book)
}

//根据id删除
fun deleteBookById(id:Long):Int{
return bookDao.deleteBookById(id)
}

}

MainViewModel

class MainViewModel :ViewModel() {

//查询所有的book
fun getAll():LiveData<List>{
return Repository.loadAllBook()
}
}

MainActivity

这里要注意数据库操作是属于耗时的操作,Room默认是不允许放在主线程中进行数据库操作,所以我们把对数据库增删改的操作放到了子线程中。

class MainActivity : AppCompatActivity() {
private lateinit var binding:ActivityMainBinding
private val list=ArrayList()
private lateinit var adapter: BookAdapter
private val mainViewModel by lazy {
ViewModelProvider(this).get(MainViewModel::class.java)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

binding= ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
//初始化适配器
adapter=BookAdapter(R.layout.item_book,list)
binding.rvBook.adapter=adapter

//viewModel+liveData监听数据变化—数据库数据一旦发生变化 这里就会收到通知
mainViewModel.getAll().observe(this, Observer {
list.clear()
Log.d(TAG, “onCreate: ${it.size}”)
list.addAll(it)
adapter.notifyDataSetChanged()
})
//注册点击事件
adapter.addChildClickViewIds(R.id.btnDelete,R.id.btnUpdate)

//item子控件点击事件
adapter.setOnItemChildClickListener(object :OnItemChildClickListener{
override fun onItemChildClick(
adapter: BaseQuickAdapter<*, *>,
view: View,
position: Int
) {
if(view.idR.id.btnDelete){//删除按钮
thread {
Repository.deleteBookById(list[position].id)
}
}else if(view.id
R.id.btnUpdate){//修改按钮
thread {
Repository.updateBookPrice(“我被修改了!!”,list[position].id)
}
}

}
})

//添加
binding.btnAdd.setOnClickListener {
val name = binding.edtBook.text.toString().trim()
val price = binding.edtPrice.text.toString()
if(name==“”||price==“”){
Toast.makeText(this, “请填写完整”, Toast.LENGTH_SHORT).show()
}else{
val book=Book(name,price.toInt())
thread {
val id=Repository.insertBook(book)
Log.d(TAG, “onCreate: ${id}”)
}
}

}
}

companion object {
private const val TAG = “MainActivity”
}
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
android:id=“@+id/ll_edt”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:orientation=“horizontal”





<androidx.recyclerview.widget.RecyclerView
android:id=“@+id/rv_book”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
app:layoutManager=“androidx.recyclerview.widget.LinearLayoutManager”
/>

BookAdapter

class BookAdapter(layoutId:Int,list:ArrayList):BaseQuickAdapter<Book,BaseViewHolder>(layoutId,list){
override fun convert(holder: BaseViewHolder, item: Book) {
holder.setText(R.id.tv_name,item.name.toString())
holder.setText(R.id.tv_price,item.price.toString())
}

}

item_book.xml

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

img
img

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V:vip204888 备注Android获取(资料价值较高,非无偿)
img

最后

代码真的是重质不重量,质量高的代码,是当前代码界提倡的,当然写出高质量的代码肯定需要一个相当高的专业素养,这需要在日常的代码书写中逐渐去吸收掌握,谁不是每天都在学习呀,目的还不是为了一个,为实现某个功能写出高质量的代码。

所以,长征路还长,大家还是好好地做个务实的程序员吧。

最后,小编这里有一系列Android提升学习资料,有兴趣的小伙伴们可以来看下哦~

1586075653)]

最后

代码真的是重质不重量,质量高的代码,是当前代码界提倡的,当然写出高质量的代码肯定需要一个相当高的专业素养,这需要在日常的代码书写中逐渐去吸收掌握,谁不是每天都在学习呀,目的还不是为了一个,为实现某个功能写出高质量的代码。

所以,长征路还长,大家还是好好地做个务实的程序员吧。

最后,小编这里有一系列Android提升学习资料,有兴趣的小伙伴们可以来看下哦~

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值