关于GreenDao在AS中的配置方法已经有大神的博客讲得特别的详细,所以就直接贴出他的博客地址了
http://blog.csdn.net/h3c4lenovo/article/details/43566169
这里说一下我在按照教程配置的时候遇到的一些问题,貌似是引入实例工程的时候有问题,我直接贴出我改好运行无误之后的gradle:
实例工程的build.gradle文件
project(':MyDaoGenerator') {
apply plugin: 'application'
apply plugin: 'java'
mainClassName = "pl.surecase.eu.MyDaoGenerator"
//这里是之前添加好的用于存放生成文件的目录
def outputDir = "../app/src/main/java-gen"
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
//出问题的貌似是这个版本,亲测1.3.0没有问题
compile('de.greenrobot:DaoGenerator:1.3.0')
}
task createDocs {
def docs = file(outputDir)
docs.mkdirs()
}
run {
args outputDir
}
}
ok,这样基本上就没有什么问题了。运行实例工程里面的MyDaoGenerator就会发现在java-gen目录下生成了一些操作数据库的必要文件(DaoMaster、DaoSession、一些实体类和实体类的Dao)接下来就可以愉快地使用强大的greenDao了
首先封装一个帮助类继承自OpenHelper用于在数据库更新时,执行一些自己的方法(如备份等操作),直接贴代码(参考上文的大神的博客的代码)
public class MyOpenHelper extends DaoMaster.OpenHelper {
public MyOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
super(context, name, factory);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (oldVersion) {
case 1:
//创建新表
//TODO
//加入新字段
//TODO
break;
}
}
}
接下来写一个Application,用于在程序开始的时候获取Session对象
/**
* 官方推荐将取得DaoMaster对象的方法放到Application层这样避免多次创建生成Session对象。
* Created by JoeLee on 2016/8/12 0012 14:47.
*/
public class BaseApplication extends Application {
private static final String TAG = "BaseApplication";
public static Context appContext;
private static BaseApplication mInstance;
private static DaoMaster daoMaster;
private static DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
appContext = this.getApplicationContext();
if (mInstance == null) {
mInstance = this;
}
}
/**
* 获取DaoMaster
*
* @param context
* @return
*/
public static DaoMaster getDaoMaster(Context context) {
if (daoMaster == null) {
DaoMaster.OpenHelper helper = new MyOpenHelper(context, "myDb", null);
daoMaster = new DaoMaster(helper.getWritableDatabase());
}
return daoMaster;
}
/**
* 获取DaoSession
*
* @param context
* @return
*/
public static DaoSession getDaoSession(Context context) {
if (daoSession == null) {
if (daoMaster == null) {
daoMaster = getDaoMaster(context);
}
daoSession = daoMaster.newSession();
}
return daoSession;
}
}
然后在manifest文件中的application标签下添加name属性,用刚刚写的application替换默认Application
".base.BaseApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
接下来就可以写一个操作数据库的服务类了
public class DbService {
private static DbService mInstance;
private static Context appContext;
private DaoSession mDaoSession;
private BeanDao beanDao;
private DbService() {
}
/**
* 采用单例模式
*
* @param context
* @return
*/
public static DbService getInstance(Context context) {
if (mInstance == null) {
mInstance = new DbService();
if (appContext == null) {
appContext = context.getApplicationContext();
}
mInstance.mDaoSession = BaseApplication.getDaoSession(appContext);
mInstance.beanDao = mInstance.mDaoSession.getBeanDao();
}
return mInstance;
}
//...
//关于数据库的具体操作代码省略
//...
}
上面的代码最核心的就是通过Application的context获取对应实体类的Dao,获得了Dao之后就可以对其对应的实体进行增删查改等操作.
ok,至此关于GreenDao的配置和使用就讲到这里了,具体的更多细节大家自己去慢慢摸索吧。