android-fragments 更新/删除RoomDatabase中的条目,然后创建新条目时,应用程序崩溃

yacmzcpb  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(113)

我在一个应用程序上工作,在那里我有一个回收视图和第一个片段的晶圆厂(listFragment)当你打开app时你会看到。你点击fab,相机打开,你制作一张图片-〉点击ok,进入另一个片段,在那里你填写一些东西,然后按保存。你回到回收视图片段,现在你可以看到保存的条目(房间数据库)。当你点击你创建的listItem,然后你会看到一个更新片段,在那里你可以更新东西或者删除它。现在之前一切都很好。但是现在在yt video的帮助下,我试图也插入一个位图到数据库中。这工作(@TypeConverter),现在我也在listItem和updateFragment中显示了正确的位图。

**问题:**当我点击listItem并在updateFragment中点击更新按钮或删除图标时,我会返回listFragment。但是当我点击fab以创建新条目时,相机打开,然后应用程序崩溃(相机保持打开状态)。

即使删除和更新代码被注解掉了,当你点击这些按钮时唯一发生的事情是片段之间的导航,它仍然会崩溃,但如果我删除所有位图数据库代码,它又没事了。我可以删除和/或更新多个条目,没有问题,但当我点击晶圆厂和相机启动时,应用程序崩溃。当我点击listItem时,我还使用safeargs将数据传输到updateFragment。当我删除/更新某些内容,然后按下手机上的home键离开应用程序时,应用程序也会崩溃。我导航出应用程序,然后得到“应用程序崩溃”消息。LOGCAT:
java.lang.RuntimeException:事务处理过大异常:数据包大小4675628字节
我还发现,如果我删除/更新一行中的多个条目,然后点击晶圆厂和相机打开的字节数量成倍增加。为了达到以下数字,我删除了一行中的5个listItems:
交易太大例外状况:数据包大小23309336字节
我只是想知道这是什么类型的数据,为什么每次在updateFragment和listFragment之间导航时,它都会堆积起来(因为即使删除和更新的代码被删除,仍然会发生)?为什么它会成为一个问题,当我启动相机或关闭应用程序每个homebutton?也许与我原来认为的位图显示在listItems和updateFragment不知何故的问题。我通过使用文件提供程序来显示高质量的位图,因为在addFragment和updateFragment中,imageView相当大,并且我对listItems上的小imageView使用相同的位图。
如果有人知道为什么会发生这种情况,我会非常感激!

c86crjj0

c86crjj01#

**作者在这里:**找到了我的问题的答案,即使我还没有完全得到它。

我现在将一个uri存储为一个字符串,而不是使用一个@TypeConverter将一个位图转换为一个byteArray,然后将其存储在数据库中,并在检索时将其从byteArray转换回位图。我找到了将位图转换为uri并将位图存储在设备上的代码,它的工作原理就像一个符咒:

private fun saveImageToInternalStorage(bitmap: Bitmap): Uri {
    val wrapper = ContextWrapper(applicationContext)
    var file = wrapper.getDir(IMAGE_DIRECTORY, Context.MODE_PRIVATE)
    file = File(file, "${UUID.randomUUID()}.jpg")
    try{
        val stream : OutputStream = FileOutputStream(file)
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream)
        stream.flush()
        stream.close()
    }catch (e: IOException){
        e.printStackTrace()
    }
    return Uri.parse(file.absolutePath)
}

companion object{
        private const val IMAGE_DIRECTORY = "...Images"
    }

相关问题