Android GreenDao with Android Studio IDE

简介: 转:http://blog.surecase.eu/using-greendao-with-android-studio-ide/   In this tutorial we will show you step by step how we have created sample applic...

转:http://blog.surecase.eu/using-greendao-with-android-studio-ide/

 

In this tutorial we will show you step by step how we have created sample application that presents our own Android Studio-GreenDao communication module. We tried to focus mainly on the implementation of database in freshly created Android Studio project and took other factors (such as layouts, modularity etc.) with a grain of salt. For those who haven't checked our Git yet - you can find our GreenDao module here.

So let's get started!

Step 1 - create new Android Project

For those who are not familiar with Android Studio IDE we recommend to go through Google tutorial - Getting Started With Android Studio.

  1. To create new project please select File -> New Project. The New Project wizards pop up. Fill up fields according to your liking or do it the way we did: 
    createProject

    1. Press next. Check "Blank Activity" and next button again.
    2. Name your first activity BoxListActivity and the layout activity_box_list.
    3. Press finish.

And it's done. We have our project created. Now we can go to next step which is...

Step 2 - add GreenDao Generator module to project tree

We assume you have already downloaded our module. If not please go to our Git and do it now. Add MyDaoGenerator module to your project tree as additional package.

moduleAdded

As you can see MyDaoGenerator is recognized as Directory and not as Module like DaoExample. To change it we have to edit settings.gradle so it contains both ':DaoExample' and ':MyDaoGenerator' :

include ':DaoExample', ':MyDaoGenerator'  

After doing it, please click "Sync Project with Gradle Files" button. Your directory should look like a module now in project tree.

Step 3 - connect GreenDao Generator to DaoExample (main module)

So, MyDaoGenerator is currently recognized as a module. Now we have to configure it, so we can get database files from it. The only necessary thing to be changed is outputDir parameter inbuild.gradle file of MyDaoGenerator module.

12345678910111213141516171819202122
project( ':MyDaoGenerator') {
apply plugin: 'application'
apply plugin: 'java'
 
mainClassName = "pl.surecase.eu.MyDaoGenerator"
// edit output direction
outputDir =
 
dependencies {
compile fileTree( dir: 'libs', include: ['*.jar'])
compile( 'de.greenrobot:DaoGenerator:1.3.0')
}
 
task createDocs {
def docs = file(outputDir)
docs .mkdirs()
}
 
run {
args outputDir
}
}

Currently our root is MyDaoGenerator. We want to access DaoExample, which needs database files. To go higher - our path will start with:

outputDir = "../"  

We are currently in GreenDaoForAndroidStudio folder. We can easly go into DaoExample and create a directory for our database files. Java files in Android Studio project are stored in ../<PROJECT NAME>/src/main/java directory. To highlight the fact, that GreenDao database files are generated and will change in future as your project develops, we decided to create separate directory for them named java-gen.

Finaly our path looks like:

outputDir = "../DaoExample/src/main/java-gen"

There is no need to create this directory manualy. After running MyDaoGenerator it will be created during build.

Your GreenDao generator is now ready to inject database files to your project.

Step 4 - configure GreenDao Generator

MyDaoGenerator consists of only one class:

daoModule

Output of GreenDao Generator is deremined by content of MyDaoGenerator.class. You can create your database structure here by coding objects, relations etc. If you are not familiar with GreenDao database library, you can learn how to use it in that documentation.

We will create exemplary database with only one object. Database code needs to be placed in main method:

public class MyDaoGenerator {

    public static void main(String args[]) throws Exception { } } 

Create Schema object with represents database version and package. We will name the package greendao.

Schema schema = new Schema(3, "greendao");  

We create Entity - database object which will be named Box.

Entity box = schema.addEntity("Box");  

Now we can add properties/fields to our database Entity/Object. For example:

  • id
box.addIdProperty();  
  • String name
box.addStringProperty("name");  
  • int slots
box.addIntProperty("slots");  
  • String description
box.addStringProperty("description");  

Finaly we can invoke DaoGenerator object which is avaliable by default in MyDaoGenerator due to Maven tool (check gradle.build and dependencies section). DaoGenerator during run will create database java files that can be used in our main project. It takes two parameters: Schema and output directory.

new DaoGenerator().generateAll(schema, args[0]);  

When you look at gradle.build there is a run section in which outputDir parameter is being sent to main method as an argument. That's why args[0] will always contain output path that you have set previously in gradle. Such operation limits actions performed on MyDaoGenerator to only three steps:

  • set path in gradle.build file
  • create your database in MyDaoGenerator.class
  • run module

Step 5 - run GreenDao Generator

Pick Gradle bookmark from the right side of Android Studio interface. Choose MyDaoGenerator module and click twice on run task.

runTask

greenDAO Generator  
Copyright 2011-2013 Markus Junginger, greenrobot.de. Licensed under GPL V3.  
This program comes with ABSOLUTELY NO WARRANTY  
Processing schema version 3...  
Written /Users/surecase/dev/examples/GreenDaoForAndroidStudio/GreenDaoForAndroidStudio/DaoExample/src/main/java-gen/greendao/BoxDao.java  
Written /Users/surecase/dev/examples/GreenDaoForAndroidStudio/GreenDaoForAndroidStudio/DaoExample/src/main/java-gen/greendao/Box.java  
Written /Users/surecase/dev/examples/GreenDaoForAndroidStudio/GreenDaoForAndroidStudio/DaoExample/src/main/java-gen/greendao/DaoMaster.java  
Written /Users/surecase/dev/examples/GreenDaoForAndroidStudio/GreenDaoForAndroidStudio/DaoExample/src/main/java-gen/greendao/DaoSession.java  
Processed 1 entities in 103ms BUILD SUCCESSFUL Total time: 8.802 secs 

After starting run task, you can track flow of this operation in Gradle console. When it's complete you can see new files in DaoExample project:

runTask

And that's all work connected to MyDaoGenerator. If you are familiar with it, generation of new database will take only few minutes.

Step 6 - make DaoExample aware of new files

So we have successfully created database files that are ready to be used in any Android project. The project needs to be aware where are those files located and familiar with GreenDao objects. To achieve this it is necessary to configure build.gradle file of DaoExample module. Fresh build.gradle file of a new project looks similar to this:

123456789101112131415161718192021222324
apply plugin: 'android'
 
android {
compileSdkVersion 19
buildToolsVersion "19.0.3"
 
defaultConfig {
minSdkVersion 11
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile( 'proguard-android.txt'), 'proguard-rules.txt'
}
}
}
 
dependencies {
compile 'com.android.support:appcompat-v7:+'
compile fileTree( dir: 'libs', include: ['*.jar'])
}
  • We need to clean it first from features that we won't use in our project - buildTypes section is not needed.
  • To let our project use GreenDao database, first we need to import GreenDao library. We can do it by inserting *.jar file into libs folder or by adding extra Maven dependency in gradle:
 dependencies {
    compile 'de.greenrobot:greendao:1.3.7'
}
  • Project is still not aware of new Java files because it isn't located in ../<PROJECT NAME>/src/main/java directory. To fix this we must specify projects source sets. It is important to point two java file sources: /src/main/java and /src/main/java-gen. You can do it by placingsourceSets section into android section in gradle.build file:
12345678910
android {
 
sourceSets {
main {
manifest .srcFile 'src/main/AndroidManifest.xml'
java .srcDirs = ['src/main/java', 'src/main/java-gen']
res .srcDirs = ['src/main/res']
}
}
}
view raw sourceSets.groovy hosted with by  GitHub

Finaly our gradle will look like this:

12345678910111213141516171819202122232425262728
apply plugin: 'android'
 
android {
compileSdkVersion 19
buildToolsVersion "19.0.3"
 
defaultConfig {
minSdkVersion 11
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
 
sourceSets {
main {
manifest .srcFile 'src/main/AndroidManifest.xml'
java .srcDirs = ['src/main/java', 'src/main/java-gen']
res .srcDirs = ['src/main/res']
}
}
 
}
 
dependencies {
compile 'com.android.support:appcompat-v7:+'
compile fileTree( dir: 'libs', include: ['*.jar'])
compile 'de.greenrobot:greendao:1.3.7'
}
view raw editedGradle.groovy hosted with by  GitHub

When you finish editing gradle file, press "Sync Project with Gradle Files" button. Your java-gen directory will look the same as java folder in project tree.

Step 7 - start Database

Your project is ready to use previously created database. To have access to GreenDao database, you have to initialize it before using it. Right place for performing this operation is Application class which is instantiated for you when the process for your application/package is created. Initialization code can be found on GreenDao webpage. Application is avaliable from every activity, so we create DaoSession object which is avaliable during whole lifecycle of application and create getter for it.

12345678910111213141516171819202122
public class DaoExampleApplication extends Application {
 
public DaoSession daoSession;
 
@Override
public void onCreate() {
super.onCreate();
setupDatabase();
}
 
private void setupDatabase() {
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "example-db", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
}
 
public DaoSession getDaoSession() {
return daoSession;
}
 
}

Don't forget to register DaoExampleApplication class in your manifest:

<application  
    android:name=".DaoExampleApplication"
    (...)
</application>

Step 8 - simple operations on DB object

Database generated in this tutorial has only one Entity - Box. To perform create, edit, save, delete on it, we need too create helper class with those methods. We name it BoxRepository. Each Entity created in GreenDao has two classes:

  • class that represents structure of object
  • Dao class which is a connection of object with database

In our example those clasess are named as Box and BoxDao. So if we want start working with Box objects we need to get BoxDao object from DaoSession that was created with Application class.

private static BoxDao getBoxDao(Context c) {  
    return ((DaoExampleApplication) c.getApplicationContext()).getDaoSession().getBoxDao();
}

With access to DaoBox we can perform any operation on Box object we need. Examplary BoxRepository from our project looks like this:

1234567891011121314151617181920212223242526
public class BoxRepository {
 
public static void insertOrUpdate(Context context, Box box) {
getBoxDao(context) .insertOrReplace(box);
}
 
public static void clearBoxes(Context context) {
getBoxDao(context) .deleteAll();
}
 
public static void deleteBoxWithId(Context context, long id) {
getBoxDao(context) .delete(getBoxForId(context, id));
}
 
public static List<Box> getAllBoxes(Context context) {
return getBoxDao(context).loadAll();
}
 
public static Box getBoxForId(Context context, long id) {
return getBoxDao(context).load(id);
}
 
private static BoxDao getBoxDao(Context c) {
return ((DaoExampleApplication) c.getApplicationContext()).getDaoSession().getBoxDao();
}
}
view raw boxRepository.java hosted with by  GitHub

Examplary use that can be used in every place where Context is avaliable:

Box box = new Box();  
box.setId(5); // if box with id 5 already exists in DB, it will be edited instead of created box.setName("My box"); box.setSlots(39); box.setDescription("This is my box. I can put in it anything I wish."); BoxRepository.insertOrUpdate(context, box); 

Step 9 - rest is up to you

This is the end of this tutorial. You have all information and tools you need to start work with GreenDao database in your Android Studio project. There is no need to show you how to create views, buttons, adapters etc. If you are interested in it - whole source code and project structure of GreenDaoForAndroidStudio sample project is avaliable at SureCase git.

目录
相关文章
|
23天前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
68 1
|
10天前
|
XML IDE 开发工具
🔧Android Studio高级技巧大公开!效率翻倍,编码不再枯燥无味!🛠️
【9月更文挑战第11天】在软件开发领域,Android Studio凭借其强大的功能成为Android开发者的首选IDE。本文将揭示一些提升开发效率的高级技巧,包括自定义代码模板、重构工具、高级调试技巧及多模块架构。通过对比传统方法,这些技巧不仅能简化编码流程,还能显著提高生产力。例如,自定义模板可一键插入常用代码块;重构工具能智能分析并安全执行代码更改;高级调试技巧如条件断点有助于快速定位问题;多模块架构则提升了大型项目的可维护性和团队协作效率。掌握这些技巧,将使你的开发之旅更加高效与愉悦。
24 5
|
23天前
|
编解码 Android开发
【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手
本文介绍了Android Studio中使用ConstraintLayout布局的方法,通过创建布局文件、设置控件约束等步骤,快速上手UI设计,并提供了一个TV Launcher界面布局的绘制示例。
31 1
|
23天前
|
Android开发
Android Studio: 解决Gradle sync failed 错误
本文介绍了解决Android Studio中出现的Gradle同步失败错误的步骤,包括从`gradle-wrapper.properties`文件中获取Gradle的下载链接,手动下载Gradle压缩包,并替换默认下载路径中的临时文件,然后重新触发Android Studio的"Try Again"来完成同步。
253 0
Android Studio: 解决Gradle sync failed 错误
|
23天前
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
34 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
23天前
|
API 开发工具 Android开发
Android Studio:解决AOSP自编译framework.jar引用不到的问题
在Android Studio中解决AOSP自编译framework.jar引用问题的几种方法,包括使用相对路径、绝对路径和通过`${project.rootDir}`动态获取路径的方法,以避免硬编码路径带来的配置问题。
34 0
Android Studio:解决AOSP自编译framework.jar引用不到的问题
|
1月前
|
Java 网络安全 开发工具
UNITY与安卓⭐一、Android Studio初始设置
UNITY与安卓⭐一、Android Studio初始设置
|
1月前
|
Android开发 数据安全/隐私保护
Android Studio创建JKS签名遇到的坑
Android Studio创建JKS签名遇到的坑
80 1
|
24天前
|
Java 开发工具 Android开发
Android Studio利用Build.gradle导入Git commit ID、Git Branch、User等版本信息
本文介绍了在Android Studio项目中通过修改`build.gradle`脚本来自动获取并添加Git的commit ID、branch名称和用户信息到BuildConfig类中,从而实现在编译时将这些版本信息加入到APK中的方法。
38 0
|
1月前
|
IDE API 开发工具
与Android Gradle Plugin对应的Gradle版本和Android Studio版本
与Android Gradle Plugin对应的Gradle版本和Android Studio版本
159 0