我在Android中使用Realm进行本地存储.我正在获得以下响应表单服务器.
[{
"ListId": 10,
"Names": ["Name1", "Name2", "Name3", "Name4"]
}]
Run Code Online (Sandbox Code Playgroud)
这是我的模特
public class Model extends RealmObject {
private int ListId;
private RealmList<String> Names = new RealmList<String>()
public int getListId() {
return ListId;
}
public void setListId(int listId) {
ListId = listId;
}
public RealmList<String> getNames() {
return Names;
}
public void setNames(RealmList<String> names) {
Names = names;
}
}
Run Code Online (Sandbox Code Playgroud)
而我正在为ArrayList得到这个
类型参数'java.lang.String'不在其范围内; 应该扩展'io.realm.RealmObject'.
谢谢.
gson是一个很棒的图书馆 - 它运作良好.有时我有自定义要求,可以制作和注册TypeAdapters和TypeAdaptorFactories - 这也很有效.
然而令我困惑的是,如何委托回json序列化...大多数时候我需要这个用于集合,但为了说明这一点 - 假设我有一个对类,gson显然会愉快地序列化,但由于某种原因我需要自己的自定义序列化程序.好吧......如果我的配对是
public class Pair
{
public final Object First;
public final Object Second;
public Pair( Object first, Object second) {this.first = first; this.second = second};
}
Run Code Online (Sandbox Code Playgroud)
如果我为此编写了一个类型适配器 - 您希望 write函数看起来像:
public void write( JsonWriter out, Pair pair )
{
out.beginObject();
out.name( "first");
out.value( pair.first ); // can't do this
out.name( "second");
out.value( pair.second); // or this
out.endObject();
}
Run Code Online (Sandbox Code Playgroud)
所以你可以看到问题 - 我不知道第一个和第二个的类型,也不知道它们是如何序列化的.我可以使用gson.toJson来序列化第一个和第二个 - 但是如果我将它们作为字符串添加到编写器中,它们将被转义.有一个gson.tojson函数,它接受一个值和一个编写器 - 但它也需要一个typetoken - 我没有.我得到的印象是,我打算从某个地方安装另一个类型的适配器 - 但是当我只有一个对象列表时......我从哪里得到它?我只是获得对象的适配器?
我有点困惑?当然这是最常见的用例?大多数自定义序列化程序将用于T或T树之类的奇怪列表,并且你真的不知道列表中的内容,除了它继承自T …
我正在使用RoboSpice和GsonSpringAndroidSpiceService.我还想添加Realm来保存数据.
问题是,在每个对象都必须扩展realmObject,但是roboSpice中的gson试图解析realmObject而不是忽略它.
我试图添加排除状态:
Run Code Online (Sandbox Code Playgroud)Gson gson = new GsonBuilder() .setExclusionStrategies(new ExclusionStrategy() { @Override public boolean shouldSkipField(FieldAttributes f) { return f.getDeclaringClass().equals(RealmObject.class); } @Override public boolean shouldSkipClass(Class<?> clazz) { return false; } }) .create();
然后
Run Code Online (Sandbox Code Playgroud)GsonHttpMessageConverter gsonHttpMessageConverter = new GsonHttpMessageConverter(gson);
还尝试(单独)将@expose添加到对象中的字段,和
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
Run Code Online (Sandbox Code Playgroud)
在两种方式我有同样的错误:
09-07 11:21:04.615 8443-8443/com.mm.rsApp D/OpenGLRenderer:启用调试模式0 09-07 11:21:04.620 8443-8443/com.mm.rsApp D // SpiceManager.java:1018 :11:21:04.625 main服务范围:GsonSpiceService 09-07 11:21:04.625 8443-8466/com.mm.rsApp D // SpiceManager.java:1133:11:21:04.628 Thread-16362绑定好.09-07 11:21:04.690 8443-8443/com.mm.rsApp I /时间轴:时间轴:Activity_idle id:android.os.BinderProxy@41b8f088时间:525639153 09-07 11:21:21.890 8443-8466/com. mm.rsApp D // SpiceManager.java:245:11:21:21.896 Thread-16362向服务发送请求:CachedSpiceRequest …
我正在使用带有gson的领域.我有一个模态,其中包含一个int类型字段列表.Realm不支持当前的基元列表.要解决这个问题,有一个解决方案.我创建了我的RealmInt类.
import io.realm.RealmObject;
public class RealmInt extends RealmObject {
private int val;
public int getVal() {
return val;
}
public void setVal(int val) {
this.val = val;
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个类似的大型模态对象..
public class Product extends RealmObject {
@PrimaryKey
private int productID;
private int priority;
private boolean isFavourite;
.....
.....
.....
private RealmList<Document> documents;
private RealmList<ProductInfoGroup> productInfoGroups;
private RealmList<RealmInt> categories;
Run Code Online (Sandbox Code Playgroud)
我必须将下面的json数组反序列化为Product modals.
[{
"productID": 776,
"categories": [
35
],
"name": "",
"priority": 3,
......
"status": 2,
"documents": [
{
"documentID": 74,
"productID": …
Run Code Online (Sandbox Code Playgroud)