編輯:關於Android編程
有時候,我們的實體類中會有一些屬性,但是數據庫中沒有對應的類型,這個時候我們就需要自定義轉換器進行類型轉換。很常見的處理就是Date類型一般如果精度要求不高的話我們會轉換為Long類型進行存儲,讀取的的時候再講其轉換為Date類型。那麼如果我們想要讓它直接以時間字符串存儲呢,這個也好辦,GreenDao為我們提供了自定義類型轉換的支持。
首先,我們需要實現PropertyConverter接口,實現裡面的兩個方法convertToEntityProperty和convertToDatabaseValue,該接口需要兩個泛型參數,第一個參數是實體類中的類型,第二個參數是數據庫中存儲的類型。現在假設我們需要將Date轉換為String進行存儲,那麼接口的實現應該是這樣的。
public class DateStringConverter implements PropertyConverter {
@Override
public Date convertToEntityProperty(String databaseValue) {
return null;
}
@Override
public String convertToDatabaseValue(Date entityProperty) {
return bull;
}
}
接下來我們進行轉換
public class DateStringConverter implements PropertyConverter {
private static final String DEFAULT_FORMAT=yyyy-MM-dd HH:mm:ss;
@Override
public Date convertToEntityProperty(String databaseValue) {
return convert2Date(databaseValue,DEFAULT_FORMAT);
}
@Override
public String convertToDatabaseValue(Date entityProperty) {
return convert2String(entityProperty,DEFAULT_FORMAT);
}
public static String convert2String(Date date,String format){
String currentDate=null;
try {
SimpleDateFormat formatter=new SimpleDateFormat(format);
currentDate=formatter.format(date);
}catch (Exception e){
e.printStackTrace();
}
return currentDate;
}
public static Date convert2Date(String day, String format) {
if (day == null || format == null)
return null;
SimpleDateFormat formatter = new SimpleDateFormat(format);
try {
Date dt = formatter.parse(day);
return dt;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
之後生成實體類
Entity type = schema.addEntity(Demo);
type.addStringProperty(test).customType(java.util.Date,cn.edu.zafu.greendao.db.converter.DateStringConverter);
addProperty的時候是對應的數據庫中的類型,這裡我們存儲為字符串,所以是addStringProperty,然後通過customType函數指定實體類中的類型,這裡是java.util.Date,接著就是我們的類型轉換器的全類名。接著試試往數據庫中插入一條數據,我們會發現他直接以字符串存儲了,如圖所示
最後附帶一下混淆配置,給需要混淆的項目加入以下語句<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;">
-keepclassmembers class * extends de.greenrobot.dao.AbstractDao {
public static java.lang.String TABLENAME;
}
-keep class **$Properties
資源是從github上撸下來的,具體網址忘了。。。我就根據我的資源做個描述:目錄結構:操作步驟:①attrs.xml放在values文件夾下②CircleImageVie
應用開發中需要獲取WebView當前頁面的標題,可能通過對WebChromeClient.onReceivedTitle()方法的重寫來實現 效果圖如下: 代碼如下:
(一)概述上節我們對BroadcastReceiver已經有了一個初步的了解了,知道兩種廣播類型:標准與有序, 動態或靜態注冊廣播接收者,監聽系統廣播,自己發送廣播!已經
在Android 中有一種服務說是服務其實倒不如說是一個接口,這個接口名為:Android Interface Definition Language ,這個接口可提供跨