【发布时间】:2017-10-05 11:59:36
【问题描述】:
我在我的项目中使用 Room 作为本地数据库解决方案。 对于某个对象类型的每个列表,我已将类型转换器添加到项目中,因此类型转换器看起来像这样:
@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 出现编译错误,告诉我一个错误提示:类型转换器必须是公共的
任何人知道如何为我的 Room TypeConverter 使用泛型?
【问题讨论】:
-
很好奇你是否能够解决这个问题。如果是这样,您介意为其他人回答您的问题吗?
-
@fawaad 嗨..不,我无法以通用方式解决它。我也很好奇是否有人找到了方法......
-
我也有同样的问题,如果你解决了,请发布你的解决方案
-
@SaurabhKhare 尚未找到通用解决方案。到目前为止需要为每个列表添加类型转换器:(
-
嗨,如果您不介意的话,您可以在 GitHub 存储库中分享相关代码,我想运行并测试它。 @RikvanVelzen
标签: android generics kotlin android-room