ORMLite坚持在Android中工作吗?

时间:2014-02-21 21:08:11

标签: android ormlite

自定义限制是否适用于Android?我试图为一个实体编写一个,并且当实体由DAO编写时没有运气。所以,我尝试使用示例中的“MyDatePersister”,但我也无法使用它。

持久性与示例一致 - > https://github.com/j256/ormlite-jdbc/blob/master/src/test/java/com/j256/ormlite/examples/datapersister/MyDatePersister.java

在我的实体中,我有

@DatabaseTable
public class ClickCount implements Serializable {
    // other declarations
    @DatabaseField(columnName = DATE_FIELD_NAME, persisterClass = MyDatePersister.class)
    private Date lastClickDate;
    // more code
}

以下是Bitbucket整个项目的链接 - > https://bitbucket.org/adstro/android-sandbox。它基本上是添加了自定义persister示例的ORMLite Android示例之一。

非常感谢任何反馈。

由于

1 个答案:

答案 0 :(得分:0)

首先,您获得的错误结果是什么?

我的自定义容器工作正常,但我没有尝试扩展DateType。下面是我发现需要的JSONArrayPersister。令人困惑的部分在于方法的命名,但是一旦它们正确设置,它就应该没问题。

package com.example.acme.persister;

import com.j256.ormlite.field.FieldType;
import com.j256.ormlite.field.SqlType;
import com.j256.ormlite.field.types.BaseDataType;
import com.j256.ormlite.support.DatabaseResults;

import org.json.JSONArray;
import org.json.JSONException;

import java.sql.SQLException;

public class JSONArrayPersister extends BaseDataType {

    public static int DEFAULT_WIDTH = 1024;

    private static final JSONArrayPersister singleTon = new JSONArrayPersister();

    public static JSONArrayPersister getSingleton() {
        return singleTon;
    }

    private JSONArrayPersister() {
        super(SqlType.STRING, new Class<?>[] { String.class });
    }

    protected JSONArrayPersister(SqlType sqlType, Class<?>[] classes) {
        super(sqlType, classes);
    }

    @Override
    public Object parseDefaultString(FieldType fieldType, String defaultStr) {
        try {
            return new JSONArray(defaultStr);
        } catch (JSONException ex)
        {
            return new JSONArray();
        }
    }

    @Override
    public Object resultToSqlArg(FieldType fieldType, DatabaseResults results, int columnPos) throws SQLException {
        try {
            return new JSONArray( results.getString(columnPos) );
        } catch (JSONException ex)
        {
            return new JSONArray();
        }
    }

    @Override
    public Object resultStringToJava(FieldType fieldType, String stringValue, int columnPos) throws SQLException {
        return parseDefaultString(fieldType, stringValue);
    }

    @Override
    public int getDefaultWidth() {
        return DEFAULT_WIDTH;
    }
}

然后在你的实体中:

@DatabaseField(persisterClass = JSONArrayPersister.class)
private JSONArray something;