GreenDao,clearIdentityScope报错Error:Execution failed for task ':app:compileDebugJavaWithJavac'. > Com

简介: GreenDao,clearIdentityScope报错Error:Execution failed for task ':app:compileDebugJavaWithJavac'. > Com

首先是greendao的配置

GreenDao配置

在工程的build.grdle中,如下:

buildscript {
    
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }

    allprojects {
        repositories {
            google()
            jcenter()
            mavenCentral ()
        }
    }

}

build.gradle(Module:app)中添加下面代码:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.example.administrator.myapplication"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }//butterKnife
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
    }
}

apply plugin: 'org.greenrobot.greendao'


greendao {
    schemaVersion 1//数据库版本号
    daoPackage 'com.aa'//设置DaoMaster、DaoSession、Dao包名
    targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
    //targetGenDirTest:设置生成单元测试目录
    //generateTests:设置自动生成单元测试用例
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    //butterknife
    //动态申请权限
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'io.reactivex.rxjava2:rxjava:2.0.5'
    compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.3@aar'
    implementation files('libs/jxl.jar')

    //greendao数据库
    compile 'org.greenrobot:greendao:3.2.0'

}

出现错误:

 

Error:(41, 22) 错误: 找不到符号

符号:   方法 clearIdentityScope()

位置: 类型为DaoConfig的变量 dataDaoConfig

Error:(185, 5) 错误: 方法不会覆盖或实现超类型的方法

Error:Execution failed for task ':app:compileDebugJavaWithJavac'.

> Compilation failed; see the compiler error output for details

原因是你的greendao对应的包版本不一致,DaoMaster,DaoSession都是自动生成的,有报错,一般是jar包和依赖版本不一致。按照我上面的是可以的。

image.png

GreenDao的基本配置就已经完成了,下面我们编写一个实体类。

实体类User

  @Entity
  public class User {   
        @Id(autoincrement = true)   
        private Long id;   
        private String name;   
        private int age;
}

相关注解说明:

  • 实体@Entity注解
  • schema:告知GreenDao当前实体属于哪个schema
    active:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法
    nameInDb:在数据库中使用的别名,默认使用的是实体的类名
    indexes:定义索引,可以跨越多个列
    createInDb:标记创建数据库表
工具类

package com.bestgo.callshow.db.greendao;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

import com.bestgo.callshow.bean.BlackInfoCallMIssedBean;
import com.bestgo.callshow.db.greendao.gen.BlackInfoCallMIssedBeanDao;
import com.bestgo.callshow.db.greendao.gen.DaoMaster;
import com.bestgo.callshow.db.greendao.gen.DaoSession;

import org.greenrobot.greendao.query.QueryBuilder;

import java.util.List;

/**
 * 作者:jiuqunZhang on 2018/4/28 21:12
 * 邮箱:woshizhangjiqun@gmail.com
 */

public class DBManager {
    private final static String dbName = "test_db";
    private static DBManager mInstance;
    private DaoMaster.DevOpenHelper openHelper;
    private Context context;

    public DBManager(Context context) {
        this.context = context;
        openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
    }

    /**
     * 获取单例引用
     *
     * @param context
     * @return
     */
    public static DBManager getInstance(Context context) {
        if (mInstance == null) {
            synchronized (DBManager.class) {
                if (mInstance == null) {
                    mInstance = new DBManager(context);
                }
            }
        }
        return mInstance;
    }
    private SQLiteDatabase getReadableDatabase() {
        if (openHelper == null) {
            openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
        }
        SQLiteDatabase db = openHelper.getReadableDatabase();
        return db;
    }
    private SQLiteDatabase getWritableDatabase() {
        if (openHelper == null) {
            openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
        }
        SQLiteDatabase db = openHelper.getWritableDatabase();
        return db;
    }
    /**
     * 插入一条记录
     *
     * @param BlackInfoCallMIssedBean
     */
    public void insertUser(BlackInfoCallMIssedBean BlackInfoCallMIssedBean) {
        DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        BlackInfoCallMIssedBeanDao userDao = daoSession.getBlackInfoCallMIssedBeanDao();
        userDao.insert(BlackInfoCallMIssedBean);
    }
    public void insertUserList(List<BlackInfoCallMIssedBean> BlackInfoCallMIssedBeans) {
        if (BlackInfoCallMIssedBeans == null || BlackInfoCallMIssedBeans.isEmpty()) {
            return;
        }
        DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        BlackInfoCallMIssedBeanDao userDao = daoSession.getBlackInfoCallMIssedBeanDao();
        userDao.insertInTx(BlackInfoCallMIssedBeans);
    }
    public void deleteUser(BlackInfoCallMIssedBean BlackInfoCallMIssedBean) {
        DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        BlackInfoCallMIssedBeanDao userDao = daoSession.getBlackInfoCallMIssedBeanDao();
        userDao.queryBuilder()
                .where(BlackInfoCallMIssedBeanDao.Properties.PhoneNumber.eq(BlackInfoCallMIssedBean.getPhoneNumber()))
                .buildDelete()
                .executeDeleteWithoutDetachingEntities();
    }
    public void updateUser(BlackInfoCallMIssedBean BlackInfoCallMIssedBean) {
        DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        BlackInfoCallMIssedBeanDao userDao = daoSession.getBlackInfoCallMIssedBeanDao();
        userDao.update(BlackInfoCallMIssedBean);
    }
    public List<BlackInfoCallMIssedBean> queryUserList() {
        DaoMaster daoMaster = new DaoMaster(getReadableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        BlackInfoCallMIssedBeanDao userDao = daoSession.getBlackInfoCallMIssedBeanDao();
        QueryBuilder<BlackInfoCallMIssedBean> qb = userDao.queryBuilder().orderDesc(BlackInfoCallMIssedBeanDao.Properties.PhoneNumber);
        List<BlackInfoCallMIssedBean> list = qb.list();
        return list;
    }


    /**
     * 查询用户列表
     */
    public List<BlackInfoCallMIssedBean> queryUserList(String path) {
        DaoMaster daoMaster = new DaoMaster(getReadableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        BlackInfoCallMIssedBeanDao userDao = daoSession.getBlackInfoCallMIssedBeanDao();
        QueryBuilder<BlackInfoCallMIssedBean> qb = userDao.queryBuilder();
        qb.where(BlackInfoCallMIssedBeanDao.Properties.PhoneNumber.gt(path)).orderAsc(BlackInfoCallMIssedBeanDao.Properties.PhoneNumber);
        List<BlackInfoCallMIssedBean> list = qb.list();
        return list;
    }

这是有关增删改查的管理办法。

在实体类中这样用:

DBManager.getInstance(getApplicationContext()).insertUser(blackInfoCallMIssedBean);
其他的语句类似。

实体类的生成比较简单,就是如下:

@Entity
public class BlackInfoBean {
    /**
     * 自增长的id
     */
    @Id
    private Long id;
    /**
     * 联系人id,相当于姓名
     */
    private long contactsId;
    /**
     * 联系人姓名
     */
    private String name;
    /**
     * 电话号码
     */
    private String phoneNumber;

类似这个,@Entity,@Id就是GreeenDao的标志。写完属性之后就直接点击Make Project。就是自动的生成Get,Set方法还有toString。


每个人应用的场景不一样,欢迎留言, 一起 讨论。

目录
相关文章
|
30天前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
449 7
|
2月前
|
监控 JavaScript 前端开发
深入理解 Nuxt.js 中的 app:error 钩子
【9月更文挑战第25天】在 Nuxt.js 中,`app:error` 钩子是一个强大的工具,用于处理应用程序中的各种错误。它可以在服务器端渲染或客户端运行时触发,帮助提升应用稳定性和用户体验。通过在 `nuxt.config.js` 中定义该钩子,开发者可以实现错误页面显示、错误日志记录及错误恢复等功能,确保应用在遇到问题时能妥善处理并恢复正常运行。
48 10
|
15天前
|
C#
【Azure App Service】使用Microsoft.Office.Interop.Word来操作Word文档,部署到App Service后报错COMException
System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (0x80040154 (REGDB_E_CLASSNOTREG)).
|
2月前
|
开发者 UED
深入理解 Nuxt.js 中的 app:error 钩子
【9月更文挑战第26天】在 Nuxt.js 中,钩子函数是在特定生命周期阶段执行代码的机制,`app:error` 钩子用于处理应用中的错误,包括服务器端和客户端渲染时出现的问题。它提供了一个集中处理错误的机制,提升了用户体验。当组件渲染过程中出现错误时,`app:error` 钩子会被触发,可以在 `nuxt.config.js` 文件中定义该钩子。通过分析错误对象 `err` 和上下文信息 `context`,开发者可以更好地处理各种错误情况。相比组件内的 `try/catch` 或浏览器原生错误处理,`app:error` 提供了更全局和有针对性的错误处理方式。
|
3月前
【Azure Logic App】使用Outlook.com发送邮件遇到429报错
【Azure Logic App】使用Outlook.com发送邮件遇到429报错
|
3月前
|
开发工具 git
【Azure App Service】App Service设置访问限制后,使用git clone代码库出现403报错
【Azure App Service】App Service设置访问限制后,使用git clone代码库出现403报错
|
3月前
|
开发框架 .NET Windows
【App Service】在App Service中配置Virtual applications and directories,访问目录中的静态文件报错404
【App Service】在App Service中配置Virtual applications and directories,访问目录中的静态文件报错404
|
3月前
|
缓存
【Azure Function】Function App代码中使用Managed Identity认证获取Blob数据时遇见400报错
【Azure Function】Function App代码中使用Managed Identity认证获取Blob数据时遇见400报错
【Azure Function】Function App代码中使用Managed Identity认证获取Blob数据时遇见400报错
|
3月前
|
安全 前端开发 网络安全
【Azure App Service】访问App Service应用报错 SSL: WRONG_VERSION_NUMBER
【Azure App Service】访问App Service应用报错 SSL: WRONG_VERSION_NUMBER
137 0
|
29天前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
498 1

热门文章

最新文章