首先,你得到的錯誤結果是什麼?
我讓我的自定義persister工作得很好,雖然我沒有嘗試擴展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;