android greendao的外部封装不太友好。
https://github.com/greenrobot/greenDAO
下载下官网的示例,有完整的封装版本,但自已封装是碰到很多问题。
因greenDao的Master和Session中很多方法完全是隐藏的,只属于此类。
很多信息也是隐藏的。
只能基于继承此两类来实现(像官网示例一样)
想通过公有方法来实现最基本的一个demo也碰到很多坑。
这是示例
Master.DevOpenHelper dbhelp=new Master.DevOpenHelper(this,"dbname",null);
SQLiteDatabase db=dbhelp.getWritableDatabase();
DaoConfig dc=new DaoConfig(db,BaiduUserDao.class);
BaiduUserDao dao=new BaiduUserDao(dc);
BaiduUser baiduUser=new BaiduUser(null,"tel","name1","pwd","mail");
dao.insert(baiduUser);
有两个坑
一:
BaiduUserDao类必须设置 TABLENAME静态属性
public static final String TABLENAME = "BaiduUser";
不然会报错
java.lang.NoSuchFieldException: TABLENAME 二必须设置Properties静态内部类
public static class Properties {
public final static Property Id = new Property(0, Long.class, "id", true, "_id");
public final static Property Tel = new Property(1, String.class, "telphone", false, "Tel");
public final static Property UserName = new Property(2, String.class, "username", false, "UserName");
public final static Property Email = new Property(3, String.class, "password", false, "Email");
public final static Property PassWord = new Property(4, String.class, "email", false, "PassWord");
};
不然会报错
java.lang.ClassNotFoundException: com.mac.cdp.androidbaidusign.dao.BaiduUserDao$Properties 好在有异常信息提示,不然类内部没有限制,也没有明显的说明。
但也可以理解,限制到构造里,太浪费了,而静态方法更省字段。 …… 我还是照着git上示例的测试代码,通过继承session和master来吧。 我也真是没事找事 想不按官网的路子封装几个工具类,发觉无路可走,只能按他的路子来 session 的registerDao 方法
master 的registerDaoClass 方法
都只能在子类中调用。不提供public方法,只能在子类实现中调用,或套一层public个方法。 这两个的设计逻辑不好。
访问同一个类,要先在master注册daoclass 再在session注册model和dal的关联。
要分两部,应该
放在一处会更好。 经试,确实可以只注调用session的registerDao
完全可以无视
master 的registerDaoClass 方法
android greendao的外部封装不太友好。的更多相关文章
- Android GreenDao操作外部DB数据库文件
1.背景 所谓外部数据库文件此处指的就是一个在外部单独创建的db文件,假设有这么一个场景,我们项目中有一些本地数据,不需要接口去获取的(不需要进行网络操作),写死的数据,比如全国各个省各个市的一些基本 ...
- Android Studio 导入外部lib文件
Android Studio 导入外部lib文件 1.将jar包放入Module里的lib文件夹中.(自己创建lib文件夹) 2.在project选中jar包点击右键"Add as li ...
- [Android] Android GreenDao 保存 JavaBean 或者List <JavaBean>类型数据
Android GreenDao 保存 JavaBean 或者List <JavaBean>类型数据 简介 数据库存储数据基本上每个APP都有用到,GreenDAO 是一个将对象映射到 S ...
- Android所有Demo资源汇总,太全了(申明:来源于网络)
Android所有Demo资源汇总,太全了(申明:来源于网络) 地址:http://bbs.csdn.net/topics/391928947
- android studio 调试技巧(简直太好用)
android studio 调试技巧(简直太好用) 说到android studio的调试,很多人可能会说,这有什么可讲的不就是一个断点调试么,刚开始我也是这么认为的,直到我了解之后,才发现,调试原 ...
- Android greenDao的简单配置和使用
最近自学做东西的时候用到了一个收藏的功能,然后我想把东西存放到SQLite当中,然而自己传值的时候都是用到的实体类,所以存起来也比较麻烦,所以从网上找到一个greenDao的开源框架非常火,不仅效率高 ...
- Android GreenDao使用教程
1.在build.gradle里添加相关依赖 apply plugin: 'org.greenrobot.greendao' buildscript { repositories { mavenCen ...
- Android GreenDao 在组件化项目中的一个问题 - 2018年7月5日21:15:14
组件化项目使用GreenDao时注意的事项: 1.要在组件化中的基础库(domain层)创建实体类: 2.如果sycn之后不能生产Dao文件,使用 Android Studio 的Gradle插件重新 ...
- 【Android】把外部文件拷贝的AVD安卓模拟器上的sdcard上,而且在AVD中浏览sdcard的文件
首先.实现这一切的大前提是.你的AVD安卓模拟器,在启动之前.有设置好sdcard的大小,例如以下图.同一时候,你的AVD安卓模拟器,要处于启动状态.否则无法运行例如以下的操作. 这里以<[An ...
随机推荐
- Linux--shell 计算时间差
参考:https://www.cnblogs.com/leixingzhi7/p/6281675.html starttime=`date +'%Y-%m-%d %H:%M:%S'` #执行程序 en ...
- Red Hat、Fedora和Ubuntu软件包操作
五.Red Hat.Fedora和Ubuntu软件包操作对比 最后总结: 在 /etc/yum.conf 的 [main] 后面添加以下配置即可! 复制代码 代码如下: exclude=kernel* ...
- Python笔记_第四篇_高阶编程_正则表达式_3.正则表达式深入
1. re.split 正则的字符串切割 str1 = "Thomas is a good man" print(re.split(r" +",str1)) # ...
- os发展史
01. 操作系统的发展历史 1.1 Unix 1965 年之前的时候,电脑并不像现在一样普遍,它可不是一般人能碰的起的,除非是军事或者学院的研究机构,而且当时大型主机至多能提供30台终端(30个键盘. ...
- 操作实践,IDEA自定义toString()方法模板
声明:迁移自本人CSDN博客https://blog.csdn.net/u013365635 Java POJO在日志中常会用于打印,经常会将POJO的内容全部或部分打印出来,所以POJO类的toSt ...
- 提高WiFi上网速度
https://jingyan.baidu.com/article/1876c852aa668c890b1376c4.html http://www.coozhi.com/youxishuma/you ...
- flutter依赖某些插件,点击运行会出现错误
org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true android.enableAapt ...
- UML-领域模型-添加关联和属性
1.何谓关联? 关联(association):一个类的全局变量引用了另一个类,就表示关联了这个类 2.何时使用关联? 长时间(需要记住)留存的需要关联:短时间的不需要.比如: 需要关联:老师教那些课 ...
- 用Matplotlib画三维图片的一个实例
from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np from matp ...
- Java之同步代码块处理实现Runnable的线程安全问题
/** * 例子:创建三个窗口卖票,总票数为100张.使用实现Runnable接口的方式 * * 1.问题:卖票过程中,出现了重票.错票 -->出现了线程的安全问题 * 2.问题出现的原因:当某 ...