当前位置: 首页 > 面试题库 >

RoboSpice使用OrmLite保留JSON数组

钱和平
2023-03-14
问题内容

我将RoboSpice与Spring for
Android结合使用,并希望使用OrmLite保留对象的JSON数组。GSON用于JSON编组。使用默认缓存,一切都会按预期进行。但是OrmLite似乎不喜欢对象数组。

这是JSON的简化版本:

[{"id": 1, "title": "Test 1"},{"id": 2, "title": "Test 3"},{"id": 3, "title": "Test 3"}]

我想在以下对象中坚持这一点:

@DatabaseTable
public class Foo {
    @DatabaseField(id = true)
    private int id;
    @DatabaseField
    private String title;

    // getters and setters
    ...
}

基于RoboSpice OrmLite示例,我创建了以下GsonSpringAndroidSpiceService类来添加OrmLite
CacheManager。这是问题开始的地方。

public class CustomGsonSpringAndroidSpiceService extends GsonSpringAndroidSpiceService
{
    @Override
    public CacheManager createCacheManager(Application application)
    {
        // add persisted classes to class collection
        List<Class<?>> classCollection = new ArrayList<Class<?>>();
        classCollection.add(Foo.class);

        // init
        CacheManager cacheManager = new CacheManager();
        cacheManager.addPersister(new InDatabaseObjectPersisterFactory(
            application, new RoboSpiceDatabaseHelper(
                application, "database.db", 1), classCollection));
        return cacheManager;
    }
}

这将导致以下错误:

RequestProcessor.java:174(22356): java.lang.RuntimeException: Class [Lcom.example.model.Foo; is not handled by any registered factoryList

当我改变classCollection.add(Foo.class);classCollection.add(Foo[].class);
我得到以下错误:

RequestProcessor.java:174(22601): 14:42:23.112 pool-5-thread-1 An unexpected error occured when processsing request CachedSpiceRequest [requestCacheKey=foo, cacheDuration=-1, spiceRequest=com.example.app.FooRequest@4055df40]
RequestProcessor.java:174(22601): java.lang.IllegalArgumentException: No fields have a DatabaseField annotation in class [Lcom.example.app.model.Foo;

有人知道如何使用OrmLite CacheManager处理JSON数组吗?


问题答案:

我已经找到解决此问题的方法。我添加了一个额外的结果对象,该对象保存对象数组。当然,这只有在您能够操纵JSON的情况下才有可能。对此仍然不是很满意,因为我向模型引入了无用的类。

所以我的JSON看起来像:

{ 
    "id": 1,
    "result":[{"id": 1, "title": "Test 1"},{"id": 2, "title": "Test 3"},{"id": 3, "title": "Test 3"}]
}

我添加了以下类来保存JSON结果:

@DatabaseTable
public class FooResult {
    @DatabaseField(id = true)
    private int id;
    @ForeignCollectionField(eager = false)
    private Collection<Foo> result;

    // getters and setters
    ...
}

还在Foo类中添加了外部关系:

@DatabaseTable
public class Foo {
    @DatabaseField(id = true)
    private int id;
    @DatabaseField
    private String title;
    @DatabaseField(foreign = true)
    private FooResult result;

    // getters and setters
    ...
}


 类似资料:
  • 问题内容: 我对此还有些陌生,因此我可能不知道所有常规术语: 使用JSON编码时是否可以保留Python元组?现在给我一个清单。我不想将元组转换为列表,但是我想使用JSON。那么,有选择吗? 原因:我正在创建一个使用多维数组的应用程序,但并不总是相同的形状。我有一些使用递归来探测数组并将端点转换为字符串或整数的类方法。我最近意识到(基于递归的工作方式)我可以使用元组来防止对数组进行更深入的递归搜索

  • 问题内容: 我有两个如下的类设置。当我需要注释什么东西作为外国收藏时,我什么时候不需要,我感到困惑。这听起来也很愚蠢,但是文档中没有任何地方说明是否允许非外部集合。如果我有一个自动装箱到的清单,该怎么办?我可以使用上面的标准来坚持吗?根据,外国馆藏还必须具有向后引用才能正常工作(给父母的引用,具有一对多的关系)。对于下面的示例,我假设您应该将注解作为外部集合并进行异化,但是您将如何处理呢? 我在这

  • 如果你默认使用Markdown编辑器编辑文档,但是文字中存在一些 Markdown 的保留字。 例如: 表中中出现 | 需要输入 ` 需要成对的出现 [ ] >和<也是需要转义后才能显示。 等等,一些特殊需求。可以通过unicode编码来解决。 将要输入的字符进行转义,之后使用转义字符即可。 常见转义字符: 原字符 转义字符 | | ` ` ] ] [ [ > &gt; < &lt; @ @ #

  • 如何在Jolt转换JSON数组中保留其他字段,我正在尝试使用通配符,但在最终输出中没有添加字段? 这是我正在使用的输入示例 我使用了下面的Jolt转换,并尝试了通配符: 下面是我的预期输出,其中发生了移位操作,然后需要保持所有其他字段不变 即将到来的实际输出:

  • robospice 是 Repo 的开源 Android 库,能够让编写异步网络请求变得非常简单。它专门用于网络请求,通过使用 Spring Android 或者 Google Http Client 等扩展模块可支持 REST 请求。