【问题标题】:如何使用 Room 创建 JSONObject 列?
【发布时间】:2022-01-23 10:05:42
【问题描述】:

我在服务器上有一个数据库(MySql)和一个本地数据库(Room),在服务器上的数据库中有一个名为 countries 的表,在该表内部,有一个名为 countryName 的列和该列的类型是 JSON,如下图所示。

The Image

countryName里面的内容是JSONObject

表格

@Entity(tableName = "Countries")
public class Country {
    
    private JSONObject countryName;

    public Country(JSONObject countryName) {
        this.countryName = countryName;
    }

    public JSONObject getCountryName() {
        return countryName;
    }
    
}

错误

Cannot figure out how to save this field into database. You can consider adding a type converter for it.

如何使用 Room 创建 JSONObject 列?

【问题讨论】:

  • Json 对象无法保存到房间,转换为字符串并保存到房间并在检索字符串时再次转换,将完成工作。
  • @RaBaKa78 我知道,不过最好像服务器一样存储

标签: java android json android-room


【解决方案1】:

Java 版本:

  class MyConverters {
    @TypeConverter
    public String jsonToString(JSONObject data){
        return data.toString();
    }

    @TypeConverter
    public JSONObject stringToJson(json: JSONObject){
      return JSONObject(json);
     }
}

并在您的数据库上方使用它:

@Database(entities = ....)
@TypeConverters({MyConverters.class})
public abstract class RoomDb extends RoomDatabase {

    public abstract UserDao userDao();

}

【讨论】:

    【解决方案2】:

    房间不支持直接保存JSON数据类型,但是可以写一个@TypeConverter

    使用类型转换器:

    internal class MyConverters {
    
        @TypeConverter
        fun jsonToString(data: JSONObject): String = data.toString()
    
        @TypeConverter
        fun stringToJson(json: JSONObject): JSONObject = JSONObject(json)
    }
    

    在你的Dao上方使用这个:

    @Dao
    @TypeConverters(MyConverters::class)
    internal abstract class MyDao
    ...
    

    【讨论】:

    • Java 不是 Kotlin
    • 嗯,几乎是一样的,但无论如何,答案是由 RaBaKa 发布的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    • 2018-06-13
    • 1970-01-01
    • 2017-07-11
    • 2015-11-13
    • 1970-01-01
    • 2014-07-12
    相关资源
    最近更新 更多