๐ฑ dreaming DiNO
[Kotlin] [์๋ฌํด๊ฒฐ] Gson TypeConverter ์ Null ์ฒ๋ฆฌ (Nullable coulmn ์ถ๊ฐ) ๋ณธ๋ฌธ
Android/Android Studio
[Kotlin] [์๋ฌํด๊ฒฐ] Gson TypeConverter ์ Null ์ฒ๋ฆฌ (Nullable coulmn ์ถ๊ฐ)
MK_____ 2022. 5. 16. 09:35๐ฅบ ์๋ฌ ๋ฐ์
java.lang.RuntimeException: Exception while computing database live data.
at androidx.room.RoomTrackingLiveData$1.run(RoomTrackingLiveData.java:92)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.NullPointerException: gson.fromJson(value, Array<String>::class.java) must not be null
at com.example.memolog.repository.StringListTypeConverter.jsonToList(StringListTypeConverter.kt:21)
at com.example.memolog.repository.dao.MemoDao_Impl$14.call(MemoDao_Impl.java:414)
at com.example.memolog.repository.dao.MemoDao_Impl$14.call(MemoDao_Impl.java:345)
at androidx.room.RoomTrackingLiveData$1.run(RoomTrackingLiveData.java:90)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Room db ์ปฌ๋ผ์ nullable ํ List<String>? ์ ์ถ๊ฐํ๊ณ , migration ํ ์ด๋ธ ์ถ๊ฐ ๋ถ๋ถ
database.execSQL("ALTER TABLE 'memo' ADD COLUMN 'image' TEXT")
๐ ์๋ฌ ํด๊ฒฐ
์๋ ์์ค
@ProvidedTypeConverter
class StringListTypeConverter(private val gson: Gson) {
@androidx.room.TypeConverter
fun listToJson(value: List<String>?): String? {
return value?.let{ gson.toJson(value) }
}
@androidx.room.TypeConverter
fun jsonToList(value: String?): List<String> {
return if (value?.isEmpty() == true) { // "" ๊ณต๋ฐฑ๊ฐ
Log.d("MemoDebug", "value==$value==")
emptyList()
} else {
gson.fromJson(value, Array<String>::class.java).toList()
}
}
}
return๋ฌธ ๋ณด๋ฉด value?.isEmpty() ๋ "" ์ ์ธ์ด ๋ value ๊ฐ์ด ์๋ค๋ ๋ป์ด๋ค.
NULL ๊ณผ๋ ๋ค๋ฅด๋ค. NULL์ ์์ ์ ์ธ์กฐ์ฐจ ๋์ง ์์ ๊ฒ
๋๋ ๋น์ฐํ nullable ํ coulmn์ ๋ง๋ค๊ณ insert ํ์ผ๋ TypeConverter ๊ฐ null ๊ฐ์ ์ด์ผ ๋ณํํด์ผ ํ ์ง ๋ชฐ๋ผ
else ๋ฌธ์ ํ๊ณ NULL ์๋ฌ๋ฅผ ๋ฟ์๋ค.
์์ ์์ค
@androidx.room.TypeConverter
fun jsonToList(value: String?): List<String> {
return try{
gson.fromJson(value, Array<String>::class.java).toList()
}catch (e: Exception){
emptyList()
}
}
try catch ๋ก NULL ์ก์์ฃผ๊ธฐ
NULL ๊ฐ์ด ์๋๋ฉด ๋ณํํ๊ณ NULL ๊ฐ์ด๋ฉด ๋น ๋ฆฌ์คํธ๋ฅผ ๋ฐํํ๋๋ก ์ก์์คฌ๋๋
๋๋์ด Nullableํ coulmn๊ฐ ์ถ๊ฐ ์ฑ๊ณต! ๐ญ