OrmLiteConfigUtil配置文件生成问题

时间:2013-10-14 18:34:08

标签: android ormlite

我将其作为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> {

SingleImageMes​​sage扩展了相同的常见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
...

2 个答案:

答案 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);
}