我从API获取respose并将其存储在房间中以显示结果。我在我的详细片段中有一个编辑按钮。如果我在detailFragment中编辑任何名称,它需要更新房间数据库中的characterName。我如何做到这一点?PC:我是Android开发新手
DetailActivity.kt
class DetailActivity : AppCompatActivity() {
private lateinit var binding: ActivityDetailBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityDetailBinding.inflate(layoutInflater)
setContentView(binding.root)
supportActionBar?.hide()
binding.editBtn.setOnClickListener {
showEditDialog()
}
// Get the HpProperty object from the intent extra
val hpProperty = intent.getSerializableExtra("hpProperty") as? HpProperty
binding.character.text = getString(R.string.character_name, hpProperty?.character)
binding.nickName.text = getString(R.string.character_nickname, hpProperty?.nickname)
binding.hogwartsHouse.text = getString(R.string.character_house, hpProperty?.hogwartsHouse)
binding.interpretedBy.text = getString(R.string.character_actor, hpProperty?.interpretedBy)
Glide.with(this)
.load(hpProperty?.image)
.transition(DrawableTransitionOptions.withCrossFade())
.error(R.drawable.ic_launcher_background)
.transform(CircleCrop())
.into(binding.imageView)
}
private fun showEditDialog() {
val hpProperty = intent.getSerializableExtra("hpProperty") as? HpProperty
binding.character.visibility = View.INVISIBLE
binding.characterEdit.visibility = View.VISIBLE
binding.editBtn.visibility = View.INVISIBLE
binding.tickBtn.visibility = View.VISIBLE
binding.characterEdit.setText(getString(R.string.character_name, hpProperty?.character))
binding.tickBtn.setOnClickListener {
updateDatabase()
}
}
private fun updateDatabase() {
binding.tickBtn.visibility = View.INVISIBLE
binding.editBtn.visibility = View.VISIBLE
binding.characterEdit.visibility = View.INVISIBLE
binding.character.visibility = View.VISIBLE
}
}
道:
@Dao
interface HpPropertyDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertAll(hpProperties: List<HpPropertyEntity>)
@Query("SELECT * FROM hp_properties")
fun getAll(): List<HpPropertyEntity>
@Update
fun update(hpProperty: HpPropertyEntity)
}
如果我编辑名称并单击勾选按钮,则需要编辑房间数据库,并且需要在显示字符名称的回收站视图上更新。
1条答案
按热度按时间mwg9r5ms1#
编辑数据库等同于更新。
有两种方法可以使用Room进行更新。您可以使用带有
@Update
注解的函数(方便的方法),也可以使用UPDATE SQL语句指定@Query
。@RawQuery
,但这些通常不被使用。前者根据传递给函数的一个或多个对象中构成表主键的一个或多个值来标识要更新的行。因此主键的一个或多个值不能更改。
第二种方法更灵活,但通常更混乱/复杂,但可以允许更新主键列。
因此,**检查一下是否为传递给更新函数的
HpPropertyEntity
**的主键字段设置了正确的值(假设这是您最终调用来执行更新的内容)。