国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

GreenDao的簡單使用及混淆打包

2019-11-09 19:07:14
字體:
來源:轉載
供稿:網友

關于android數據庫框架,有很多種,各有各的優勢。 先來看一個圖 這里寫圖片描述,但對于批量查詢操作,性能最優的莫過于greendao了。今天來說說關于它簡單的使用方式。 在3.0以前,還需要用一個java項目來生成session和dao類。但是從3.0開始,則使用編譯時注解,在編譯時就生成了,方便了很多。 1. 配置gradle dependencies { // This is only needed if you want to use encrypted databases // compile 'net.zetetic:android-database-sqlc 2. 創建映射的model,也就是數據表映射類,對象里面的數據則為表字段

@Entitypublic class CommunityConfig { @Id PRivate Long id; private int telephone; private int age; @Generated(hash = 215426893) public Config() { } @Generated(hash = 418835560)//如果剛剛創建或者更改表需要升級數據庫版本,則去掉括號內容 public Config(Long id, int telephone, int age) { this.id = id; this.telephone = telephone; this.age= age; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public int getTelephone() { return telephone; } public void setTelephone(int telephone) { this.telephone = telephone; } public int getAge() { return age; } public void setAge(int age) { this.age= age; } @Override public String toString() { return "Config{" + "id=" + id + ", telephone=" + telephone + ", age=" + age+ '}'; } /** * 設置為默認配置 */ public void setDefaultData() { this.telephone = 0; this.age= 0; }}

這樣則能夠生成一張Config表,字段有id,telephone,age。 3. 使用 1) application(APP)中,加入全局session初始化。

/** * 是否加密數據庫. */ public static final boolean ENCRYPTED = false; private static DaoSession daoSession; private final String DB_ENCRYPIED_NAME = "encrypied_db"; private final String DB_NAME = "normal_db"; @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate();//初始化session DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, ENCRYPTED ? DB_ENCRYPIED_NAME : DB_NAME);// Database db = ENCRYPTED ? helper.getEncryptedWritableDb(getResources().getString(R.string.db_psw)) : helper.getWritableDb();//如果使用了加密,則需要用密碼打開 Database db = helper.getWritableDb(); daoSession = new DaoMaster(db).newSession();//獲取到daoSession,用于后續操作 } /** * 請求DaoSession * * @return */ public static DaoSession getDaoSession() { return daoSession; }

2)

插入insertConfigDao configDao = APP.getDaoSession().getConfigDao();Config config=new Config(null, 1111111111, 11);configDao.insert(config);//加入刪除deleteAPP.getDaoSession().getConfigDao().deleteAll();//這樣子刪除全部條目,也可以刪除單個。delete(T entity)。查 query//查的方式就很多了,這是查全部,放進listConfigDao configDao = APP.getDaoSession().getConfigDao(); List<Config> configs = configDao.queryBuilder().build().forCurrentThread().list();//線程安全 if (configs != null && configs.size() != 0) { return configs.get(0);//取第一個 }//按條件查找//eqdao.queryBuilder().where(Dao.propertys.字段.eq("為什么").unique();//unique得到唯一對象//likedao.queryBuilder().where(Dao.propertys.字段.like("值%").list();//like來用于通配符查找,返回集合//betweendao.queryBuilder().where(Dao.propertys.字段.between(20,30).list();//該字段下,在20到30之間的集合//gt==》大于dao.queryBuilder().where(Dao.propertys.字段.gt(20).list();//該字段下,在20之后的集合//lt==》小于dao.queryBuilder().where(Dao.propertys.字段.lt(20).list();//該字段下,在20之下的集合//notEq==》不等于dao.queryBuilder().where(Dao.propertys.字段.notEq(20).list();//該字段下,不等于20的集合//ge==》大于等于dao.queryBuilder().where(Dao.propertys.字段.ge(20).list();//該字段下,大于等于20的集合//orderAscdao.queryBuilder().where(Dao.propertys.字段.eq("為什么").orderAsc(Dao.Properties.字段).list();//該字段等值后再升序排序改 update//獲取到dao操作類ConfigDao configDao = APP.getDaoSession().getConfigDao();//查找到要更改的對象Config config=configDao.queryBuilder().build().forCurrentThread().list().get(0);config.setAge(00);//重新設置值configDao.update(config);//更改數據庫

具體查看官方api,因為查詢用的最多,所以這里查詢講得多一點。

注意:

如果升級數據庫,原數據庫表中數據可以不保存,則使用此框架可以。因為源碼中數據庫的update,刪除了之前的表,再重新創建的,所以不會報錯。但是也因此原始數據會造成丟失。打包混淆問題(打包后的APK,使用不了): 打包后使用不了,debug能使用,很明顯,混淆的問題。報錯如下:Caused by: org.greenrobot.greendao.DaoException: Could not init DAOConfig at org.greenrobot.greendao.internal.DaoConfig.<init>(Unknown Source) at org.greenrobot.greendao.AbstractDaoMaster.registerDaoClass(Unknown Source) at com.demo.model.h.<init>(Unknown Source) at com.demo.APP.onCreate(Unknown Source) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4615) at android.app.ActivityThread.access$1600(ActivityThread.java:155) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1392) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5318) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:922) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:717) Caused by: java.lang.NoSuchFieldException: TABLENAME at java.lang.Class.getField(Class.java:1048) at org.greenrobot.greendao.internal.DaoConfig.<init>(Unknown Source) at org.greenrobot.greendao.AbstractDaoMaster.registerDaoClass(Unknown Source) at com.demo.model.h.<init>(Unknown Source) at com.demo.APP.onCreate(Unknown Source) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4615) at android.app.ActivityThread.access$1600(ActivityThread.java:155) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1392) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5318) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:922) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:717)

解決辦法只需要在混淆文件中加入下面代碼即可:

#greendao3.2.0,此是針對3.2.0,如果是之前的,可能需要更換下包名-keep class org.greenrobot.greendao.**{*;}-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {public static java.lang.String TABLENAME;}-keep class **$Properties
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 剑河县| 庆云县| 太仆寺旗| 荃湾区| 淄博市| 英德市| 陇川县| 海宁市| 普宁市| 汶上县| 宁海县| 科技| 平昌县| 台东市| 剑川县| 平舆县| 石景山区| 冕宁县| 休宁县| 洛川县| 宕昌县| 扶余县| 江达县| 罗平县| 出国| 乌恰县| 辽中县| 景德镇市| 自贡市| 中卫市| 民勤县| 广河县| 金川县| 莱芜市| 外汇| 郁南县| 台湾省| 兴山县| 靖边县| 杭锦旗| 章丘市|