自定义限制是否适用于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示例之一。
非常感谢任何反馈。
由于
答案 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;