GreenDao3.0基础使用

前言

现在的应用基本上都已经实现了联网功能,但是网络无法保证始终处于畅通的状态,如果只要没网或者网络较慢就展示空白页面给用户,这种使用体验非常不好。数据的缓存功能就能够很好的解决这种问题,数据库通常都被作为有结构的数据缓存的首选,greendao实现了Android应用快速开发和集成数据存储功能,现在来简单使用下greendao框架。

配置

在项目的根目录下的build.gradle中配置greendao需要使用的gradle插件。

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
    }
}

接下来在需要使用greendao功能的模块build.gradle里应用greendao的插件,并且在dependencies配置里增加上greendao的依赖,同时还要在这个文件的全局设置greendao生成的代码位置和对应数据库的版本号。

apply plugin: 'com.android.library'
apply plugin: 'org.greenrobot.greendao'
...

greendao {
    schemaVersion 1
    daoPackage 'com.example.download.db.greendao'
    targetGenDir 'src/main/java'
}

...
dependencies {
    ...
    compile 'org.greenrobot:greendao:3.2.2'
}

添加完成之后需要sync以下gradle配置,等到sync完成就可以使用greendao提供的功能。

添加Entity

在配置阶段制定的greendao生成目录里增加一个简单的JavaBean类,为这个类增加@Entity标签,同时写上所有要保存的字段,定义好id字段,注意使用自增长id时一定要确保id是Long类型的,同时配上@Id(autoincrement=true)。

@Entity
public class DownloadEntity {
    @Id(autoincrement = true)
    private Long id;
    private Long startPosition;
    private Long endPosition;
    private Long progressPosition;
    private String downloadUrl;
    private Integer threadId;
}

写完了上面定义的Entity之后需要重新生成整个项目,点击Android Studio菜单栏的Build -> Make Project功能,等重新生成完代码会发现在制定greendao包下面多了很多greendao为用户自动生成的数据库存储类,这些类还是比较原始的需要用户自己封装它们来使用。

添加封装代码

封装代码可以使用单例模式,把所有数据库操作的对象都封装在这个单例对象中,用户只需要调用这个封装对象的单例来处理数据库操作。现在封装对象暂时只支持entity的插入功能和查询功能。

public class DownloadHelper {
    private static DownloadHelper sHelper = new DownloadHelper();

    private DaoMaster mMaster;
    private DaoSession mSession;
    private DownloadEntityDao mDao;

    // 实现封装对象的单例
    public static DownloadHelper getInstance() {
        return sHelper;
    }

    private DownloadHelper() {

    }

    // 在Application中调用的初始化方法
    public void init(Context context) {
        // 创建简单的数据库
        SQLiteDatabase db = new DaoMaster.DevOpenHelper(context, "download.db", null).getWritableDatabase();
        // 初始化操作数据库的对象
        mMaster = new DaoMaster(db);
        mSession = mMaster.newSession();
        mDao = mSession.getDownloadEntityDao();
    }

    // 插入entity功能
    public void insert(DownloadEntity entity) {
        mDao.insertOrReplace(entity);
    }

    // 查询Entity的功能
    public List<DownloadEntity> getAll(String url) {
        return mDao.queryBuilder()
                .where(DownloadEntityDao.Properties.DownloadUrl.eq(url))
                .orderAsc(DownloadEntityDao.Properties.ThreadId)
                .list();
    }
}

测试数据库

以前测试数据库的时候自己在代码里打印log日志把这个表的内容都打印出来,通常数据少的时候还能接受,多了就完全没法看。后来使用Root功能不停的adb pull拉取本地数据库查看,这两种方式都很低效。好在facebook发布了一款开源的工具stetho,在chrome浏览器中输入chrome://inspect/#devices,点击inspect指定的Android设备会打开Developer Tools窗口。在build.gradle的dependencies部分添加stetho以来,同时在Application中初始化它。

// build.gradle添加依赖
compile 'com.facebook.stetho:stetho:1.5.0'

// Application初始化
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        DownloadHelper.getInstance().init(this);
        Stetho.initializeWithDefaults(this);
    }
}

如果第一次打开这个窗口可能会一直处于白屏状态,这是因为被墙无法访问外网导致的,自己配置下VPN吧。查看Resources Tab页,左边的WebSQL-> download.db就是测试生成的数据库。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/xingzhong128/article/details/79774613
今日推荐