GreenDao Android Studio

35
我正在寻找一个清晰的、逐步说明如何在Android Studio中导入GreenDao的方法。
我之前曾经在AS中使用过它,但现在无法再次使用。虽然有一些教程,但似乎不适用于最新版本的AS。
当我从GitHub克隆时,会得到一个示例项目等内容。有没有一种方法可以安装GreenDaoGenerator而不带这些额外的东西呢?
我只是想找一个最新的、逐步详细的说明。
更新:我建议现在使用Realm.io!看看吧!:-)
任何帮助都将不胜感激!

这个怎么样:http://blog.surecase.eu/using-greendao-with-android-studio-ide/? - MiguelHincapieC
似乎跳过了约20个步骤,名称也不匹配。 - G_V
将近两年过去了,仍然没有一个像样且最新的指南可以从零开始! - sham
这个示例将会帮助你:http://wiki.workassis.com/android-greendao-example/ - Bikesh M
我在这里写了一个8步教程,介绍如何在Android Studio中集成greenDao:https://akinsete.github.io/articles/2017-01/integrating-greenDao-into-your-android-application - Sunday G Akinsete
6个回答

47

在Android Studio 2.0上进行测试

使用Android Studio 0.6.1+(可能还有更早版本),您可以将非Android项目作为模块轻松地添加到Android项目中。

使用以下方法,您可以在同一项目中拥有Java模块(greenDaoGenerator)和Android模块,同时也能够编译和运行Java模块作为独立的Java项目。

  1. 在Android Studio中打开您的Android项目。如果您没有一个,请创建一个。
  2. 点击文件 > 新建模块。选择Java库并点击下一步。
  3. 填写包名等信息,然后点击完成。现在您应该在Android项目中看到一个Java模块。
  4. 打开java项目的build.gradle文件,并添加以下依赖项:

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile('de.greenrobot:DaoGenerator:1.3.0')
    }
    
  5. 将您的DaoGenerator类复制到Java模块中,如果没有则创建一个。例如,我在我的Java模块中创建了ExampleDaoGenerator类。

  6. public class ExampleDaoGenerator {
    
        public static void main(String[] args) throws Exception {
            Schema schema = new Schema(1000, "de.greenrobot.daoexample");
            addNote(schema);
            new DaoGenerator().generateAll(schema, "../DaoExample/src-gen");
        }
    
        private static void addNote(Schema schema) {
            Entity note = schema.addEntity("Note");
            note.addIdProperty();
            note.addStringProperty("text").notNull();
            note.addStringProperty("comment");
            note.addDateProperty("date");
       }
    
    }
    

现在,按照以下步骤生成可在 Android 项目中使用的类。

  1. 单击顶部菜单栏中的运行菜单。单击编辑配置...
  2. 在新窗口中,单击窗口左上角的加号并选择应用程序
  3. 应该出现一个新的应用程序配置,请填写以下信息。

    1. 为其命名,例如:greenDao
    2. 主类中单击... 按钮,然后选择具有主方法的生成器类。例如,在本例中,它是 com.greendao.generator.ExampleDaoGenerator
    3. 工作目录中,选择您的 Java 项目路径。
    4. 使用模块类中,选择您的 Java 项目。 单击确定。
    5. 再次转到运行菜单,现在您可以看到例如运行 greendao。单击它。它应该成功编译。

完成了!您可以在您指定的文件夹中检查生成的类。例如,在本例中,它是 /DaoExample/src-gen

注意:您可以通过单击运行菜单 -> 编辑配置 再次运行 Android 项目。选择您的项目并单击确定。


将依赖项添加到Java项目中,我想要将greenDAO添加到哪个模块或刚创建的模块?生成器从哪里来,放在模块的哪个位置是否重要? - G_V
你需要在你的Android项目的build.gradle文件中添加compile('de.greenrobot:greendao:1.3.7') - MiguelHincapieC
它给了我这个错误:Exception in thread "main" java.io.IOException: ../app/src-gen不存在。此检查是为了防止意外生成文件到错误的路径中。你有什么想法如何解决这个问题吗?谢谢。 - Ultimo_m
1
我通过在应用程序模块下手动添加目录 src-gen 来解决了这个问题。 - Ultimo_m
主要步骤#3也可以通过选择您的Java类,右键单击并选择运行Java类来自动创建。 - Juan Mendez
显示剩余2条评论

4
这里是逐步概述如何将GreenDao集成到您的Android项目中的步骤。
[参考如何在Android中使用GeenDao?]
[项目链接:GreenDao示例]
PART1:设置GREENDAO
1.创建一个Android项目。
2.单击“文件>新建>新模块”。选择“Java库”,然后单击下一步。

Img 1

现在我们需要添加以下Gradle依赖项。
在“Module:app”的“build.gradle”中,插入以下内容。
compile 'de.greenrobot:greendao:2.1.0'

Img 2

在“Module:greendao-generator”的build.gradle中插入以下内容。
compile 'de.greenrobot:greendao-generator:2.1.0'

Img 3

确保你同步了你的项目。

Img 4

现在,在MainGenerator.java中,我们将定义数据库结构。
import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Schema;

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

        //place where db folder will be created inside the project folder
        Schema schema = new Schema(1,"com.codekrypt.greendao.db");

        //Entity i.e. Class to be stored in the database // ie table LOG
        Entity word_entity= schema.addEntity("LOG");

        word_entity.addIdProperty(); //It is the primary key for uniquely identifying a row

        word_entity.addStringProperty("text").notNull();  //Not null is SQL constrain

        //  ./app/src/main/java/   ----   com/codekrypt/greendao/db is the full path
        new DaoGenerator().generateAll(schema, "./app/src/main/java");

    }
}
  1. 运行 MainGenerator.java

enter image description here

运行完后,您会在主项目文件夹中观察到一个新建的文件夹,即db

enter image description here

第二部分:将其与Android项目集成

  1. Set the activity_main.xml layout.

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textData"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true" />
    
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Save"
        android:id="@+id/textSave"
        android:layout_below="@+id/textData"
        android:layout_alignEnd="@+id/textData"
        android:layout_marginTop="22dp" />
    
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Show Top"
        android:id="@+id/textTop"
        android:layout_below="@+id/textSave"
        android:layout_alignParentStart="true"
        android:layout_marginTop="35dp" />
    

  2. In MainActivity.java,

添加以下代码。
package com.codekrypt.greendao;

import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.codekrypt.greendao.db.DaoMaster;
import com.codekrypt.greendao.db.DaoSession;
import com.codekrypt.greendao.db.LOG;
import com.codekrypt.greendao.db.LOGDao;

import java.util.List;

public class MainActivity extends AppCompatActivity {

    //Dao --> Data Access Object
    private LOGDao log_dao; // Sql access object
    private LOG temp_log_object; // Used for creating a LOG Object

    String log_text="";  //Entered text data is save in this variable

    private  final String DB_NAME ="logs-db" ;  //Name of Db file in the Device

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Initialise DAO
        log_dao=setupDb();

        //Setting up form elements
        Button textSave= (Button) findViewById(R.id.textSave);
        Button textTop= (Button) findViewById(R.id.textTop);
        final TextView textData=(TextView) findViewById(R.id.textData);

        assert textSave != null;
        textSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                log_text=textData.getText().toString();
                temp_log_object=new LOG(null,log_text);// Class Object, Id is auto increment

                SaveToSQL(temp_log_object);
            }
        });

        assert textTop != null;
        textTop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textData.setText( getFromSQL() );
            }
        });
    }

    //---------------------------------SQL QUERY Functions-----------------------------------------//
    public String getFromSQL(){
        List<LOG> log_list = log_dao.queryBuilder().orderDesc(LOGDao.Properties.Id).build().list();  
        //Get the list of all LOGS in Database in descending order

        if(log_list.size()>0) {  //if list is not null

            return log_list.get(0).getText();
            //get(0)--> 1st object
            // getText() is the function in LOG class
        }
        return "";
    }

    public void SaveToSQL(LOG log_object) {
        log_dao.insert(log_object);
    }
    //----------------------------***END SQL QUERY***---------------------------------------------//


    //-------------------------------DB Setup Functions---------------------------------------------//

    //Return the Configured LogDao Object
    public LOGDao setupDb(){
        DaoMaster.DevOpenHelper masterHelper = new DaoMaster.DevOpenHelper(this, DB_NAME, null); //create database db file if not exist
        SQLiteDatabase db = masterHelper.getWritableDatabase();  //get the created database db file
        DaoMaster master = new DaoMaster(db);//create masterDao
        DaoSession masterSession=master.newSession(); //Creates Session session
        return masterSession.getLOGDao();
    }
    //-------------------------***END DB setup Functions***---------------------------------------//

}
  1. 在运行应用程序之前,请确保您已更改配置。 输入图像描述

  2. 现在运行它。

第三部分 - 查看SQL数据库

  1. 打开命令提示符。
  2. 输入以下命令。 输入图像描述

  3. 在SQLite3中打开db文件 输入图像描述

  4. 使用SQLite3 输入图像描述

第四部分 - 额外内容

  1. GREENDAO的结构(核心类)

enter image description here


这适用于GreenDAO 3吗? - Asme Just
1
我在这里写了一个8步骤的指南,介绍如何在Android Studio中集成greenDao:https://akinsete.github.io/articles/2017-01/integrating-greenDao-into-your-android-application - Sunday G Akinsete

2

适用于Android 1.3预览版

对于排名第一的答案(在Android Studio 1.0上测试),您可能需要将该源文件夹包含在项目中。转到app/build.gradle

在android块内添加以下内容

sourceSets{

main{
    java{
        srcDir 'src-gen'
    }
}

2

我已经使用这个教程来学习Android Studio 0.8.9,一切都运行良好。


链接现在不可用。请提供活动链接。 - Teekam
你说得没错,但是在被采纳的答案之前我就已经提供了这个答案,所以我想应该没有问题吧 ;) - MiguelHincapieC
我在这里写了一个8步骤的教程,介绍如何在Android Studio中集成greenDao:https://akinsete.github.io/articles/2017-01/integrating-greenDao-into-your-android-application - Sunday G Akinsete

1

解决方案:IO异常

  1. 进入您的DAO生成器构建。
  2. 添加:应用'application'
  3. 添加:mainClassName = "you.package.include.Main"
  4. 在应用任务(Gradle任务)中执行“run”

我不知道为什么手动创建运行配置时它不起作用。


0

基本上,您需要做的是将一个Java库模块(文件>新建>新模块..)添加到您的Android项目中(假设您正在使用Android Studio),并将生成代码插入到此模块的.java类中的public static void main(String[] args) {}中。然后运行它,代码将在您的主应用程序模块中生成。

请参阅博客文章以获取逐步教程和说明。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接