2017-10-05 6 views
1

私のプロジェクトではRoomをローカルデータベースソリューションとして使用しています。型コンバータは、次のようなものになりますので、私はプロジェクトに型コンバータを追加した特定のオブジェクトタイプのすべてのリストについては :Android:タイプコンバータの作り方(for 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でコンパイルエラーが発生していない:型コンバータは

誰でもアイデアパブリックである必要がありますどのようにI私の部屋のTypeConverterのジェネリックを使用できますか?

答えて

0

私はちょうどこれをテストしました、あなたが探しているもののための基礎をしているようです。あなたまであなたのニーズに機能を微調整するために、それはあなたが軌道に乗る必要があります。これは、文字列に任意の型のリストを変換するトリックを行う可能性がありますhttps://kotlinlang.org/docs/reference/generics.html#generic-functions

fun test() { 
     val list1 = listOf("1", "2") 
     val list2 = listOf(1, 2, 3) 

     list1.convertToString() 
     list2.convertToString() 
    } 

    fun List<Any>.convertToString(): String { 
     var result = "" 
     val gson = Gson() 
     for (i in 0.. size - 1) { 
      result += gson.toJson(get(i), get(i).javaClass) 
     } 
     return result 
    } 
+1

リファレンス、それがために問題を解決しませんルームでのtypeConvertorsの使用。リスト上の拡張を使用している場合、@typeConverterで注釈をつけていても)文字列に変換したい場合。 "このフィールドをデータベースに保存する方法を理解できません。" –

関連する問題