android 如何在房间数据库中编辑特定数据?-Kotlin

0mkxixxg  于 2023-04-18  发布在  Android
关注(0)|答案(1)|浏览(95)

我从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)
}

如果我编辑名称并单击勾选按钮,则需要编辑房间数据库,并且需要在显示字符名称的回收站视图上更新。

mwg9r5ms

mwg9r5ms1#

编辑数据库等同于更新。
有两种方法可以使用Room进行更新。您可以使用带有@Update注解的函数(方便的方法),也可以使用UPDATE SQL语句指定@Query

  • 还有其他方式发布UPDATE语句,例如通过@RawQuery,但这些通常不被使用。

前者根据传递给函数的一个或多个对象中构成表主键的一个或多个值来标识要更新的行。因此主键的一个或多个值不能更改。
第二种方法更灵活,但通常更混乱/复杂,但可以允许更新主键列。
因此,**检查一下是否为传递给更新函数的HpPropertyEntity**的主键字段设置了正确的值(假设这是您最终调用来执行更新的内容)。

相关问题