2014-02-21 105 views
0

自定義持續工作在Android上嗎?我試圖爲一個實體編寫一個實體,並且在實體被DAO寫入時沒有運行它。所以,我嘗試使用示例中的「MyDatePersister」,我也無法使其工作。ORMLite是否支持Android?

留存器是幾乎相同的例子一個 - >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 
} 

下面是在到位桶整個項目的鏈接 - >https://bitbucket.org/adstro/android-sandbox。它基本上是添加了自定義persist示例的ORMLite Android示例之一。

任何反饋將不勝感激。

謝謝

回答

0

首先,你得到的錯誤結果是什麼?

我讓我的自定義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;