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。


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

目录
相关文章
|
3天前
|
JavaScript API
Vue3 运行可以,build 打包发布报错,app.config.globalProperties 用法坑
Vue3 运行可以,build 打包发布报错,app.config.globalProperties 用法坑
10 2
|
6天前
|
开发工具 iOS开发
解决Flutter运行报错Could not run build/ios/iphoneos/Runner.app
解决Flutter运行报错Could not run build/ios/iphoneos/Runner.app
27 2
|
6天前
|
开发工具 Android开发
上架Google Play报错:For new apps, Android App Bundles must be signed with an RSA key.
上架Google Play报错:For new apps, Android App Bundles must be signed with an RSA key.
17 1
|
1月前
|
安全 前端开发 网络安全
【Azure App Service】访问App Service应用报错 SSL: WRONG_VERSION_NUMBER(上海蓝云阻断页)
在Azure App Service上部署的应用遇到`SSL: WRONG_VERSION_NUMBER`错误。问题可能由不兼容的TLS版本引起,但即使将最小入站TLS版本改为1.2,问题仍存在。实际原因是上海蓝云的阻断页面,表明网站未完成ICP备案或有安全规定限制。解决方案包括:1) 对App Service绑定自定义域名并进行ICP备案,或2) 使用Application Gateway处理公网请求。在复杂环境中,需仔细排查和适配规则。
88 11
|
2月前
|
存储 Android开发 Kotlin
Kotlin开发安卓app,在使用 MediaPlayer 播放 res/raw 中的音乐时遇到突然中断的问题,而 onErrorListener 没有接收到任何报错
在使用 Android MediaPlayer 播放 res/raw 中的音乐时遇到中断问题,可能的原因包括资源问题、媒体文件编码格式、生命周期管理和设备资源配置。要排查问题,检查音频文件是否正确包含,格式编码是否支持,MediaPlayer 是否正确管理及释放,以及设备是否有足够存储和配置。通过设置 onErrorListener 日志和确保在 onDestroy 中释放资源来调试。如果文件过大,考虑使用 AssetManager。遵循这些步骤可帮助诊断并解决播放中断的问题。
110 0
|
3月前
|
弹性计算 Serverless 应用服务中间件
Serverless 应用引擎操作报错合集之阿里函数计算中出现'python app.py'的错误如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
3月前
|
开发者
【Hbuilder】Hbuilder 原生App-云打包,报错需要打包校验
【Hbuilder】Hbuilder 原生App-云打包,报错需要打包校验
125 0
|
2天前
|
Web App开发 Android开发
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
实时数据传输在互联网中至关重要,不仅支持即时通讯如QQ、微信的文字与图片传输,还包括音视频通信。一对一通信常采用WebRTC技术,如《Android Studio开发实战》中的App集成示例;而一对多的在线直播则需部署独立的流媒体服务器,使用如SRT等协议。SRT因其优越的直播质量正逐渐成为主流。本文档概述了SRT协议的使用,包括通过OBS Studio和SRT Streamer进行SRT直播推流的方法,并展示了推流与拉流的成功实例。更多细节参见《FFmpeg开发实战》一书。
9 1
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
|
9天前
|
Web App开发 5G Linux
FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
一年一度的毕业季来临,计算机专业的毕业设计尤为重要,不仅关乎学业评价还积累实战经验。选择紧跟5G技术趋势的音视频APP作为课题极具吸引力。这里推荐三类应用:一是融合WebRTC技术实现视频通话的即时通信APP;二是具备在线直播功能的短视频分享平台,涉及RTMP/SRT等直播技术;三是具有自定义动画特效及卡拉OK歌词字幕功能的视频剪辑工具。这些项目不仅技术含量高,也符合市场需求,是毕业设计的理想选择。
31 6
FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
|
8天前
|
编解码 Java Android开发
FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流
​SRT Streamer是一个安卓手机端的开源SRT协议直播推流框架,可用于RTMP直播和SRT直播。SRT Streamer支持的视频编码包括H264、H265等等,支持的音频编码包括AAC、OPUS等等,可谓功能强大的APP直播框架。另一款APP直播框架RTMP Streamer支持RTMP直播和RTSP直播,不支持SRT协议的直播。而本文讲述的SRT Streamer支持RTMP直播和SRT直播,不支持RTSP协议的直播。有关RTMP Streamer的说明参见之前的文章《使用RTMP Streamer开启APP直播推流》,下面介绍如何使用SRT Streamer开启手机直播。
28 4
FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流

热门文章

最新文章