我在一個應用程式上作業,我在打開應用程式時看到的第一個片段(listFragment)上有一個 recyclerview 和一個 fab。你點擊工廠,相機打開,你拍一張照片->點擊確定并進入另一個片段,在那里你填寫一些東西,然后按保存。你回到 recyclerview 片段,現在你可以看到保存的條目(房間資料庫)。當您在到達更新片段之前單擊您創建的 listItem 時,您可以更新或洗掉它。現在一切正常之前。但現在在yt 視頻的幫助下,我嘗試將位圖也插入到資料庫中。這有效(@TypeConverter),現在我還在 listItem 和 updateFragment 中顯示了正確的位圖。
問題: 當我單擊 listItem 并在 updateFragment 中單擊更新按鈕或洗掉正常作業的圖示時,我回傳 listFragment。但是,當我然后單擊工廠以創建新條目時,相機會打開,然后應用程式崩潰(并且相機保持打開狀態)。
即使洗掉和更新代碼被注釋掉并且當您單擊這些按鈕時發生的唯一事情是片段之間的導航它仍然會崩潰,但是如果我洗掉所有位圖資料庫代碼,它又會很好。我可以洗掉和/或更新多個條目沒問題,但是當我單擊工廠并且相機啟動應用程式時,應用程式崩潰了。當我單擊 listItem 時,我還使用 safeargs 將資料傳輸到 updateFragment。當我洗掉/更新某些內容然后按手機上的主頁按鈕離開應用程式時,該應用程式也會崩潰。我導航出應用程式,然后收到“應用程式崩潰”訊息。 日志貓:
java.lang.RuntimeException: android.os.TransactionTooLargeException: 資料包大小 4675628 位元組
我還發現,如果我連續洗掉/更新多個條目,然后單擊晶圓廠,相機會打開位元組數倍增。為了達到以下數字,我連續洗掉了 5 個 listItems:
TransactionTooLargeException:資料包大小 23309336 位元組
我只是想知道這是什么型別的資料,為什么它會為我的 updateFragment 和 listFragment 之間的每次導航疊加(即使洗掉和更新的代碼被洗掉,仍然會發生)?為什么當我啟動相機或按主頁按鈕關閉應用程式時它會成為問題?也許與我原來的想法相反,listItems 和 updateFragment 中顯示的位圖在某種程度上是問題所在。我使用檔案提供程式顯示高質量位圖,因為在 addFragment 和 updateFragment 中,imageViews 相當大,我對 listItems 上的小 imageViews 使用相同的位圖。
如果有人知道為什么會發生這種情況,我將非常感激!
uj5u.com熱心網友回復:
作者在這里: 找到了我的問題的答案,即使我還沒有完全明白。
我現在將 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"
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/493917.html
標籤:科特林 安卓片段 机器人房间 类型转换器 安卓安全参数
