当前位置: 首页 > news >正文

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包和依赖版本不一致。按照我上面的是可以的。

 

 

custom.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。

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

相关文章:

  • Error:Execution failed for task ‘:app:preDebugAndroidTestBuild’. Conflict with dependency ‘com.andr
  • Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve com.android.suppor
  • android interface,activity之间使用接口传值。android 开发 interface在哪里写接口在哪调用
  • Android 获取本机号码
  • parse,Object和对象区别JSON对象和字符串转化StringBuilder 使用Split() 截取字符串数组String.AppendString怎么把以逗号分分割的字符串数据
  • TabLayout app:tabMode和app: tabGravity配合使用效果对比
  • Android 开发 tablayout 字体加粗 ,简便的手法:
  • android全透明背景色: android 开发 背景常用透明度
  • Android开发使用shape定义按钮背景绘制,带有渐变的按钮背景 带有渐变的动态按钮背景  gradient selector stroke android:type
  • Android获取系统时间不同方式 ,final关键字,static与final区别, static和final一起使用
  • android 开发修改switch开关颜色
  • 小米获取 版本22 手机存储权限拿不到
  • 自定义tablayout中的tab样式
  • Android 开发获取通知栏权限时会出现两个应用图标
  • GreenDao 3.0 中insert insertOrReplace save 区别
  • iOS | NSProxy
  • JavaScript 一些 DOM 的知识点
  • Leetcode 27 Remove Element
  • mysql 数据库四种事务隔离级别
  • node 版本过低
  • Objective-C 中关联引用的概念
  • PAT A1120
  • SpriteKit 技巧之添加背景图片
  • Vue.js-Day01
  • 听说你叫Java(二)–Servlet请求
  • 与 ConTeXt MkIV 官方文档的接驳
  • 国内开源镜像站点
  • #laravel 通过手动安装依赖PHPExcel#
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (4)Elastix图像配准:3D图像
  • (C语言)二分查找 超详细
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • .net refrector
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET连接MongoDB数据库实例教程
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .NET序列化 serializable,反序列化
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • [] 与 [[]], -gt 与 > 的比较
  • [1204 寻找子串位置] 解题报告
  • [51nod1610]路径计数
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [Android]常见的数据传递方式
  • [AR Foundation] 人脸检测的流程
  • [emacs] CUA的矩形块操作很给力啊
  • [EMWIN]FRAMEWIN 与 WINDOW 的使用注意
  • [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c
  • [IDF]啥?
  • [Python进阶] 获取计算机相关信息:Psutil
  • [SpringBoot系列]NoSQL数据层解决方案