前言

Android中使用Greendao时出现

W System.err: org.greenrobot.greendao.DaoException: Could not init DAOConfig
W System.err:   at org.greenrobot.greendao.internal.DaoConfig.<init>(DaoConfig.java:94)
W System.err:   at org.greenrobot.greendao.AbstractDaoMaster.registerDaoClass(AbstractDaoMaster.java:44)
W System.err:   at com.biumall.play.dao.db.DaoMaster.<init>(DaoMaster.java:48)
W System.err:   at com.biumall.play.dao.db.DaoMaster.<init>(DaoMaster.java:43)
W System.err:   at com.biumall.play.dao.DatabaseManager.init(DatabaseManager.java:21)
W System.err:   at com.biumall.play.PlayApp.onCreate(PlayApp.java:25)

异常,简单记录一下,方便自己查。

正文

简单使用

build.gradle

这个build.gradle是工程下的,

/Project/build.gradle

新增

 //新增
 classpath 'org.greenrobot:greendao-gradle-plugin:3.3.1'

我的工程完整代码

buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:8.7.0'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.3.1'
    }
}

plugins {
    id 'com.android.application' version '8.7.0' apply false
    id 'com.android.library' version '8.7.0' apply false
    id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
}

仅供参考

build.gradle

这个是模块下的/Model/build.gradle

//新增
id 'org.greenrobot.greendao'

这部分的代码

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'org.greenrobot.greendao'
}

显示引入依赖的jar

//新增
implementation 'org.greenrobot:greendao:3.3.0'

这部分完整代码

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.10.0'
    //greendao
    implementation 'org.greenrobot:greendao:3.3.0'
    //exoplayer
    implementation 'androidx.media3:media3-exoplayer:1.10.0'
}

自动生成文件的配置

greendao {
    schemaVersion 1 //数据库版本号
    daoPackage 'com.biumall.play.dao.db' // 设置DaoMaster、DaoSession、Dao 包名
    targetGenDir 'src/main/java' //设置DaoMaster、DaoSession、Dao目录
}

java代码
MusicBean.java

@Entity(nameInDb = "MusicBean")
public class MusicBean {
    @Id(autoincrement = true)
    private Long id;
    /**
     * 歌曲名
     */
    private String title;
    /**
     * 歌曲名拼音
     */
    private String titleLetter;
    /**
     * 歌曲路径
     */
    private String path;
    /**
     * 歌手
     */
    private String artist;
    /**
     * 专辑
     */
    private String album;
    /**
     * 歌曲时长
     */
    private long duration;
    /**
     * 是否收藏
     */
    private boolean favorite;
    /**
     * 专辑图片
     */
    private long albumId;
}

上面配置好后,就build一下工程,部分代码会自动生成

上面MusicBean文件也会新增部分内容,其他内容就在com.biumall.play.dao.db目录中(这部分略,自动生成的)。

@Entity(nameInDb = "MusicBean")
public class MusicBean {
    @Id(autoincrement = true)
    private Long id;
    /**
     * 歌曲名
     */
    private String title;
    /**
     * 歌曲名拼音
     */
    private String titleLetter;
    /**
     * 歌曲路径
     */
    private String path;
    /**
     * 歌手
     */
    private String artist;
    /**
     * 专辑
     */
    private String album;
    /**
     * 歌曲时长
     */
    private long duration;
    /**
     * 是否收藏
     */
    private boolean favorite;
    /**
     * 专辑图片
     */
    private long albumId;
    @Generated(hash = 1617686685)
    public MusicBean(Long id, String title, String titleLetter, String path,
            String artist, String album, long duration, boolean favorite,
            long albumId) {
        this.id = id;
        this.title = title;
        this.titleLetter = titleLetter;
        this.path = path;
        this.artist = artist;
        this.album = album;
        this.duration = duration;
        this.favorite = favorite;
        this.albumId = albumId;
    }
    @Generated(hash = 1899243370)
    public MusicBean() {
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getTitle() {
        return this.title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getTitleLetter() {
        return this.titleLetter;
    }
    public void setTitleLetter(String titleLetter) {
        this.titleLetter = titleLetter;
    }
    public String getPath() {
        return this.path;
    }
    public void setPath(String path) {
        this.path = path;
    }
    public String getArtist() {
        return this.artist;
    }
    public void setArtist(String artist) {
        this.artist = artist;
    }
    public String getAlbum() {
        return this.album;
    }
    public void setAlbum(String album) {
        this.album = album;
    }
    public long getDuration() {
        return this.duration;
    }
    public void setDuration(long duration) {
        this.duration = duration;
    }
    public boolean getFavorite() {
        return this.favorite;
    }
    public void setFavorite(boolean favorite) {
        this.favorite = favorite;
    }
    public long getAlbumId() {
        return this.albumId;
    }
    public void setAlbumId(long albumId) {
        this.albumId = albumId;
    }
}

DatabaseManager.java

public class DatabaseManager {
    private static final String DB_NAME = "music.db";
    private static DaoSession mDaoSession;

    public static void init(Context context) {
        try {
            DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, DB_NAME);
            SQLiteDatabase db = helper.getWritableDatabase();
            DaoMaster daoMaster = new DaoMaster(db);
            mDaoSession = daoMaster.newSession();
        } catch (Exception e) {
            e.printStackTrace();
            Log.d(PlayApp.TAG, "init e : " + e);
        }
    }

    public static MusicBeanDao getMusicBeanDao() {
        return mDaoSession.getMusicBeanDao();
    }
}

PlayApp.java

这里提前初始化。

DatabaseManager.init(this);

至此代码部分已经写完了,运行起来,发现出现异常。

W System.err: org.greenrobot.greendao.DaoException: Could not init DAOConfig
W System.err:   at org.greenrobot.greendao.internal.DaoConfig.<init>(DaoConfig.java:94)
W System.err:   at org.greenrobot.greendao.AbstractDaoMaster.registerDaoClass(AbstractDaoMaster.java:44)
W System.err:   at com.biumall.play.dao.db.DaoMaster.<init>(DaoMaster.java:48)
W System.err:   at com.biumall.play.dao.db.DaoMaster.<init>(DaoMaster.java:43)
W System.err:   at com.biumall.play.dao.DatabaseManager.init(DatabaseManager.java:21)
W System.err:   at com.biumall.play.PlayApp.onCreate(PlayApp.java:25)

异常处理

隐藏内容!
付费阅读后才能查看!
3
4
多个隐藏块只需支付一次

参考文章

  1. Greendao官网

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

none
暂无评论...