当前位置: 首页 > 知识库问答 >
问题:

如何在Room数据库Android中使用JSONObject

邓威
2023-03-14

如果我在room数据库实体中使用JSONObject,我会遇到一个问题。

@Entity(tableName = RoomDbConstant.formTable)
data class FormEntity(
    @NonNull
    @SerializedName("id")
    @PrimaryKey(autoGenerate = false)
    var formId: String,
    @NonNull
    @SerializedName("title")
    var formTitle: String?,
    @NonNull
    var formCategoryId: String?,
    @NonNull
    var formSubCategoryId: String?,
    @NonNull
    var formData: String?,
    @NonNull
    var is_active: String? = AppConstants.ACTIVE,
    @NonNull
    var status: String? = AppConstants.NONE,
    @NonNull
    var is_sent_server: String? = AppConstants.NOT_SENT,
    @NonNull
    var tempEntryExisted: Boolean? = false,
    @NonNull
    @Embedded(prefix="FormDataEntity")
    var formDataEntity: FormDataEntity?,
) : Comparable<FormEntity?> {
    override fun compareTo(other: FormEntity?): Int {
        return formTitle?.compareTo(other?.formTitle.toString(), ignoreCase = true)!!
    }
}

data class FormDataEntity(
    @Embedded
    @NonNull
    var response: FormFieldsEntity
)

data class FormFieldsEntity(
    @NonNull
    var is_active: String = AppConstants.ACTIVE,
    @NonNull
    @Embedded
    var fields: ArrayList<FieldEntity>,
    @NonNull
    @SerializedName("title")
    var formTitle: String,
    @NonNull
    @SerializedName("id")
    var formId: String,
    @NonNull
    @SerializedName("gfpdf_form_settings")
    var gfpdfFormSettings: JSONObject,
)

我有三个类,第一个类是FormEntity,它有一个子类FormDataEntity,而这个FormDataEntity类有一个子类,它有JSONObject。因此,我从api获取数据,其中有一个名为“GFPDF_FORM_Settings”的JSONObject。在此输入图像说明

因此,当从API中使用GSON转换获取数据时,我将在room databse中添加数据。

val data: FormDataEntity = Gson().fromJson(obj, FormDataEntity::class.java)
                    val formModel = FormEntity(formId.toString(),Utilities.separateTitle(data.response.formTitle)[0].toString()
                        ,mCatId,mSubCatId.toString(),obj,data.response.is_active,
                        AppConstants.NONE,AppConstants.NOT_SENT,false,data)
But not able to do because I get error of roomdatabase.

工程表单/Version 2 Room数据库脱机功能/EngineeringForm/App/Build/TMP/KAPT3/Stubs/Debug/com/App/EngineeringForm/Controller/database/Entities/FormEntities/FormFieldSentity.java:20:错误:无法确定如何将该字段保存到数据库中。可以考虑为其添加一个类型转换器。私有org.json.jsonObject GFPDFFormSettings;^[WARN]请求增量批注处理,但由于以下处理器不是增量的,因此禁用了支持:AndroidX.Room.RoomProcessor(DYNAMIC)。

我尝试了所有的方法,但没有找到如何在实体类中使用JSONObject的解决方案。

共有1个答案

籍辰沛
2023-03-14

不能将JSONObject保存为RoomDB中的实体。在这种情况下,您可以将整个GFPDFFormJSON复制到JSON into Kotlin data class插件中,为其创建唯一的数据类。

您可以在这里引用:https://plugins.jetbrains.com/plugin/9960-json-to-kotlin-class-jsontokotlinclass-

关于将JSON转换为数据类,有很多答案

  1. 使用Room库插入JSON数据
  2. Android Room:将json结果转换为db对象的有效方法
 类似资料:
  • 我是android studio的初学者,希望在room数据库中存储语言数组列表。有人能建议我怎么做吗?

  • 一切正常(使用AsyncTask插入、更新、删除),但按id获取一行不是。。。 主要问题是有两种活动。 回收视图 我想在点击RecyclerView列表项后,从数据库中按id获取一个项。如果我用LiveData获取它,我就无法将其与UI线程中的变量同步。 如何从数据库中获取一行? 在DAO中,我有: 在存储库中: 如果我把它写在主线程里 它给出了一个错误: 我应该使用AsyncTask,但如何使用

  • 所以我遵循MVVM架构,在那里我有一个银行交易数据库: 我的Dao类有两个查询: 仓库: 视图模型: 在主片段中,我正在用数据库中的所有事务填充回收视图: 我的问题是:如何从DAO调用函数 要填充相同的recyclerView(当按下某个按钮时)?我不能吃这样的东西 在我的DAO中,因为查询应该在另一个线程上执行(我不允许在主线程上执行),所以我的DAO不能返回事务列表<你能提供帮助吗?

  • 由于我已经从下面的代码中导出了数据库文件,但我无法打开导出的文件,如何打开导出的文件?

  • 我刚刚实现了离线数据保存的空间。但在实体类中,我会得到以下错误: 类如下: 提前道谢。

  • 所以我根据YouTube上的教程创建了一个房间数据库。我有两个栏day and likes,每个栏都有int.目前,我已经用三行数据手动填充了数据库。 下面是手动填充数据库的代码: 在我的Dao类中,我当前有Insert、Update、deleteAll和getall...方法。这里是道: } 现在,我要从Room数据库中检索基于当天的数据。所以我想要第6天的likes数,它是1。我想检索数据并将