我将 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 数组吗?