1
我在我的項目中使用Room作爲本地數據庫解決方案。 對於我添加類型轉換器到項目中,以便類型轉換器會是這個樣子的某個對象類型的每個列表:Android:如何爲所有通用類型轉換器(for Room)製作Kotlin中的對象列表
@TypeConverter
fun convertListToString(video: List<VideoType>): String {
val videoArray = arrayOfNulls<VideoType>(video.size)
for (i in 0..video.size - 1) {
videoArray[i] = video[i]
}
var str = ""
val gson = Gson()
for (i in videoArray.indices) {
val jsonString = gson.toJson(videoArray[i])
str = str + jsonString
if (i < videoArray.size - 1) {
str = str + strSeparator
}
}
return str
}
@TypeConverter
fun convertStringToList(videoString: String): List<VideoType> {
val videoArray = videoString.split(strSeparator.toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
val videos = ArrayList<VideoType>()
val gson = Gson()
for (i in 0 until videoArray.size - 1) {
videos.add(gson.fromJson(videoArray[i], VideoType::class.java))
}
return videos
}
唯一的問題是,我有一大堆不同類型的列表的那個需要轉換,所以目前我只是複製這個代碼的每一種類型。我想使用泛型,但到目前爲止還沒有弄清楚如何去做。
例如使用類似:
@TypeConverter
inline fun <reified T> convertStringToList(string: String): List<T> {
val objectArray = string.split(strSeparator.toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
val objects = ArrayList<T>()
val gson = Gson()
for (i in 0 until objectArray.size - 1) {
objects.add(gson.fromJson(objectArray[i], T::class.java))
}
return objects
}
不能正常工作,並導致了Android Studio的編譯錯誤,給我一個錯誤說服力:類型轉換器必須是公共
任何人的想法如何我可以爲我的房間類型轉換器使用泛型?
這可能會做將任何類型的列表轉換爲字符串的伎倆,但它不解決問題的與房間一起使用typeConvertors。如果我在列表上使用擴展名,我想將其轉換爲字符串(即使使用@typeConverter對其進行註釋)。 「無法弄清楚如何將該字段保存到數據庫中。」 –