我有一个类是RealmObject的子类,我想在那个类中创建arraylist,它将由gson反序列化,当我开始构建项目编译时出现错误
Error:Type 'java.util.ArrayList<my_package.MessageContainerObject.Test>' of field 'messages' is not supported
这是我的班级
open class MessageContainerObject : RealmObject() {
@SerializedName("from")
var from = ""
@SerializedName("messages")
var messages = ArrayList<Test>()
class Test
}
如果我删除父类,一切正常
答案 0 :(得分:2)
您可以将消息定义为RealmList
来自文档:
RealmList有两种模式:托管和非托管模式。在托管模式下 所有对象都保存在Realm中,在非托管模式下它可以工作 作为普通的ArrayList。
https://realm.io/docs/java/latest/api/io/realm/RealmList.html
答案 1 :(得分:2)
ArrayList
不是Realm对象支持的字段类型。您可以看到可用的类型here,也许RealmList
适合您的用例?
答案 2 :(得分:0)
你做不到。领域只接受RealmList
。但您可以使用RealmList
并编写自定义jsonAdapter,将其转换为RealmList
,反之亦然。
open class MessageContainerObject : RealmObject() {
@SerializedName("from")
var from = ""
@SerializedName("messages")
var messages = RealmList<Test>()
}
class RealmListAdapter<T : RealmModel>(
val elementAdapter: JsonAdapter<T>) : JsonAdapter<RealmList<T>>() {
companion object {
val FACTORY: Factory = Factory { type, annotations, moshi ->
val rawType: Class<*> = Types.getRawType(type)
if (rawType == RealmList::class.java) {
val elementType = Types.collectionElementType(type, RealmList::class.java)
val elementAdapter = moshi.adapter<RealmModel>(elementType)
return@Factory RealmListAdapter(elementAdapter).nullSafe()
}
null
}
}
override fun fromJson(reader: JsonReader): RealmList<T> {
val result = RealmList<T>()
reader.beginArray()
while (reader.hasNext()) {
result.add(elementAdapter.fromJson(reader))
}
reader.endArray()
return result
}
override fun toJson(writer: JsonWriter, value: RealmList<T>) {
writer.beginArray()
for (element in value) {
elementAdapter.toJson(writer, element)
}
writer.endArray()
}
}