房间类型地图转换器

qba*_*ait 2 android android-room android-architecture-components android-jetpack

您将如何编写Map的TypeConverter?我的方法是由Moshi来做

class Converters() {

    val moshi = Moshi
            .Builder()
            .add(KotlinJsonAdapterFactory())
            .build()

    val mapOfStringsType = Types.newParameterizedType(Map::class.java, String::class.java, String::class.java)
    val mapOfStringsAdapter = moshi.adapter<Map<String, String>>(mapOfStringsType)


    @TypeConverter
    fun stringToMap(data: String): Map<String, String> {
        return mapOfStringsAdapter.fromJson(data).orEmpty()
    }

    @TypeConverter
    fun mapToString(map: Map<String, String>): String {
        return mapOfStringsAdapter.toJson(map)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,它闻起来是因为我无法通过Converters()构造函数注入Moshi 。而且,恐怕也不是最好的表现。

Bri*_*ker 5

我通常将gson用作Room TypeConverters。它允许适用于所有对象类型的简单实现:

public class StringMapConverter {
    @TypeConverter
    public static Map<String, String> fromString(String value) {
        Type mapType = new TypeToken<Map<String, String>>() {
        }.getType();
        return new Gson().fromJson(value, mapType);
    }

    @TypeConverter
    public static String fromStringMap(Map<String, String> map) {
        Gson gson = new Gson();
        return gson.toJson(map);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这就像用火箭筒杀死蚂蚁一样。并为每只蚂蚁使用一个新的不同的火箭筒。 (2认同)