iT邦幫忙

2026 iThome 鐵人賽

DAY 15
2

那如果照片還是消失了呢?像是連 App 儲存空間都讀取不到?工程師就是這種被害妄想症的生物。現在主流的做法,是將資料的狀態包裝成 sealed class,用來呈現:成功、以及失敗的狀態。

外面使用該方法的人,只需要使用 when 語法,將成功以及失敗,分成兩種不同的路線處理即可。這樣做可讀性更好,而且權責分明。

如何應用

像是取得照片的 LocalPhotoStoreopen 方法就可以改造成上述的寫法。先來新增一個專門表達狀態的 sealed class:

sealed class PhotoReadResult {
    data class Available(val bitmap: Bitmap) : PhotoReadResult()
    class Unavailable : PhotoReadResult() // 👈🏼 或用 data object 也可以
}

這個 PhotoReadResult 表達兩種狀態,成功和失敗。成功的話直接置入 bitmap 丟到外面去。

https://ithelp.ithome.com.tw/upload/images/20260903/20141615vZeSnv4KYs.png

從程式碼來看,如果啥都沒改,然後很變態的把 App 儲存空間下的照片移除,程式會 Crash(也就是直接閃退)。😇
這麼做之後安全很多,不會閃退了。有任何的錯誤會回傳 Unavailable

UI 更新

顯示調整起來也很容易,先針對使用 LocalPhotoStore 使用 open 方法的地方來看看就好。如果正在用 IDE,也可以用 Command + B (Win/Linux: Ctrl + B) 跳過去。
目前只有 OwnedPhotoImage ComposeView 在用,可以完全聚焦在這個檔案即可。

https://ithelp.ithome.com.tw/upload/images/20260903/20141615EyIxdau3jf.png

用 When 判斷式,很漂亮的可以將成功以及失敗走兩套完全不同的流程。除了好閱讀,也好修改。
Unavailable 就給他一個超簡單的 Box 顯示錯誤訊息就好了。🤗

Box(
	modifier = modifier.clipToBounds(),
	contentAlignment = Alignment.Center
) {
	Text(text = "照片暫時無法讀取")
}

就讓我很變態的把 App 儲存空間裡頭的照片刪掉,看看會變成什麼恐怖狀況。

https://ithelp.ithome.com.tw/upload/images/20260903/201416154larTwht7h.png

優雅的顯示了錯誤訊息。


上一篇
[Day14] 照片會消失,該怎麼辦?
下一篇
[Day16] 修正問題,沒有標準答案
系列文
我的第一個手作りAndroid App!快樂學習物件導向程式設計!16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

1
AndyAWD
iT邦新手 1 級 ‧ 2026-09-03 21:11:51

過一半啦!

感動!!

0
饅頭
iT邦新手 5 級 ‧ 2026-09-03 22:15:56

終於一半啦!!!

感動!!

我要留言

立即登入留言