我将其作为bug on the ORMLite Sourceforge bug tracker提出,但我没有看到任何更新。我没有看到任何流程文档说我是否需要做任何事情才能将其传递给Gray?
看到测试v4.47(旧的ORMLite版本上的行为更糟糕,因为配置文件生成更早失败)。
我的@DatabaseTable类都包含一些Android导入,例如
import android.content.Context;
我的大多数类都扩展了一个抽象的超类,例如
@DatabaseTable(tableName = SongMessage.TABLE_NAME)
public class SongMessage extends AbstractMessage {
但是,我的一些类扩展了一个共享的抽象超类,例如
@DatabaseTable(tableName = PhotoMessage.TABLE_NAME)
public class PhotoMessage extends SingleImageMessage implements <snip> {
SingleImageMessage扩展了相同的常见AbstractMessage:
public abstract class SingleImageMessage extends AbstractMessage {
运行我的OrmLiteConfigUtil适用于我的直接子类,但不适用于扩展中间抽象类的那些:
...
Wrote config for class com.mypackage.TextMessage
Skipping class com.mypackage.PhotoMessage because we got an error finding its definition: android/content/Context
Wrote config for class com.mypackage.SongMessage
...
答案 0 :(得分:1)
很抱歉我迟到的回复。 ORMLite最近有点换掉了。
运行我的OrmLiteConfigUtil适用于我的直接子类,但不适用于扩展中间抽象类的那些:
这个问题显然是因为Context
导入。不幸的是,OrmLiteConfigUtil在本地运行,并且无法访问该类,该类仅由Google导出为存根。
我能做的一件事就是只有在无法调查超类时才捕获并记录错误。因此子类将正确输出。那会有用吗?
答案 1 :(得分:0)
我可能需要查看更多的抽象类定义。该错误可能来自DatabaseFieldConfig.fromField调用。该错误消息表明它正在尝试查找android.content.Context的数据库类型定义。是否在您的抽象类中声明了该类型的字段?这是产生您看到的错误消息的代码。
private static void writeConfigForTable(BufferedWriter writer, Class<?> clazz) throws SQLException, IOException {
String tableName = DatabaseTableConfig.extractTableName(clazz);
List<DatabaseFieldConfig> fieldConfigs = new ArrayList<DatabaseFieldConfig>();
// walk up the classes finding the fields
try {
for (Class<?> working = clazz; working != null; working = working.getSuperclass()) {
for (Field field : working.getDeclaredFields()) {
DatabaseFieldConfig fieldConfig = DatabaseFieldConfig.fromField(databaseType, tableName, field);
if (fieldConfig != null) {
fieldConfigs.add(fieldConfig);
}
}
}
} catch (Error e) {
System.err.println("Skipping " + clazz + " because we got an error finding its definition: "
+ e.getMessage());
return;
}
if (fieldConfigs.isEmpty()) {
System.out.println("Skipping " + clazz + " because no annotated fields found");
return;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
DatabaseTableConfig<?> tableConfig = new DatabaseTableConfig(clazz, tableName, fieldConfigs);
DatabaseTableConfigLoader.write(writer, tableConfig);
writer.append("#################################");
writer.newLine();
System.out.println("Wrote config for " + clazz);
}