标签: greendao

使用CompilerOptions.versionToJdkLevel为GreenDao 3.2构建失败

更新到Android Studio 2.3后,尝试构建项目会导致构建失败.

任务':app:greendao'的执行失败.org.eclipse.jdt.internal.compiler.impl.CompilerOptions.versionToJdkLevel(Ljava /郎/对象;).J

如何解决这个问题?

android greendao

2
推荐指数
1
解决办法
848
查看次数

使用GreenDAO清除缓存中的数据

在我的应用程序中,有4个Activities 从活动1到4开始.

Database创建发生在activity1中,值在活动2,活动3等中更新.但是当我回到使用finish()活动3到活动2的活动时,由于缓存,它不会显示更新的值.(无法显示更新的值) )

我试过daosession.clear() ,但它没有清除数据.

那么如何清除旧缓存并重新加载数据GreenDAO.

在所有这些活动中,我使用了单独的会话.参见示例代码

假设当前活动是CaptureLocationDetails

public static CaptureLocationDetails getInstance()
{
    return instance;
}

   openHelper = new DevOpenHelper(MyApplication.getInstances());
    //openHelper.openDatabase();
    db = openHelper.getWritableDatabase();
    daoMaster = new DaoMaster(db);

    daoSession = daoMaster.newSession();



-----

----


 daoSession.getUserDao().update(entity);
Run Code Online (Sandbox Code Playgroud)

然后

GetMap class(下一个活动)

DevOpenHelper openHelper = new DevOpenHelper(MyApplication.getInstances());
    db = openHelper.getWritableDatabase();
    daoMaster = new DaoMaster(db);
    daoSession = daoMaster.newSession();
Run Code Online (Sandbox Code Playgroud)

----

 upPackLinear.setOnClickListener(new OnClickListener() {

        @Override
          public void onClick(View v)
        {

            //DaoSession.this.clear();


            //daoSession.clear();
            finish();

            CaptureLocationDetails.getInstance().daoSession.clear();

        }
    });
Run Code Online (Sandbox Code Playgroud)

但是当我返回CaptureLocationDetails …

sqlite android greendao

1
推荐指数
1
解决办法
2475
查看次数

Green Dao onUpdate.如何向旧表添加新列?

使用绿色dao时,需要进行一些代码自定义,以便从一个模式更新到下一个模式.对于我之前的需求,在DaoMaster.java中使用这样的代码添加任何新表就足够了:

 if(oldVersion==SCHEMA_VERSION_OLD_VERSION&& newVersion==SCHEMA_VERSION){
             Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by adding language & checklist table");                 
             boolean ifNotExists = true;
             NewTableDao.createTable(db, ifNotExists);
             NewTable2Dao.createTable(db, ifNotExists);              
        }
Run Code Online (Sandbox Code Playgroud)

到目前为止,它的效果非常好.但是对于我当前的模式,我在表之间添加了更多连接,并且在从旧版本更新之后,我发现崩溃表明新列不存在.

在greendao有添加新列的方法吗?我是否需要以旧学校的方式编写sqlite代码才能实现这一目标?(任何代码示例都很受欢迎)

提前致谢

sqlite android greendao

1
推荐指数
1
解决办法
4514
查看次数

在android中的GreenADO中生成重复的类

为什么在生成库greenado时创建重复的包?

在此输入图像描述

这是发电机

  private static final String PROJECT_DIR = System.getProperty("user.dir");

public static void main(String[] args) {
    Schema schema = new Schema(1, "com.greenado.db");
    schema.enableKeepSectionsByDefault();

    addTables(schema);

    try{
        DaoGenerator n=new DaoGenerator();
  n.generateAll(schema,PROJECT_DIR+ "\\app\\src\\main\\java");

    } catch (Exception e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

database error-handling android duplicates greendao

1
推荐指数
1
解决办法
629
查看次数

将 Android Studio Gradle 升级到 6.1.1 会破坏 Greendao3GradlePlugin

今天早上我升级了 Android Studio 以使用 Gradle 6.1.1。

现在,我的构建尝试失败并出现以下错误:

无法找到方法“org.gradle.api.tasks.TaskInputs.property(Ljava/lang/String;Ljava/lang/Object;)Lorg/gradle/api/tasks/TaskInputs;”。此意外错误的可能原因包括:Gradle 的依赖项缓存可能已损坏(有时会在网络连接超时后发生。)重新下载依赖项并同步项目(需要网络)

Gradle 构建进程(守护进程)的状态可能已损坏。停止所有 Gradle 守护进程可能会解决这个问题。停止 Gradle 构建过程(需要重启)

您的项目可能使用了第三方插件,该插件与项目中的其他插件或项目要求的 Gradle 版本不兼容。

在 Gradle 进程损坏的情况下,您还可以尝试关闭 IDE,然后杀死所有 Java 进程。

我使用Gradle Build Scan来查找问题。

问题出在Greendao3GradlePlugin第三方插件上。

有谁知道如何解决这个问题?

android gradle greendao

1
推荐指数
1
解决办法
1901
查看次数

greendao:插入时出现NullPointerException

我有个问题.我正在学习Greendao,但在第一步我有错误..当我想使用插入时,我得到一个nullPointerException.我不知道为什么..我在id上有自动增量,我不需要输入密码.我不知道如何使用它..

logcat的:

05-06 14:27:14.410: D/dalvikvm(2599): GC_FOR_ALLOC freed 93K, 6% free 3221K/3424K, paused 7ms, total 8ms
05-06 14:27:14.410: I/user(2599): dodano
05-06 14:27:14.474: D/libEGL(2599): loaded /system/lib/egl/libEGL_genymotion.so
05-06 14:27:14.478: D/(2599): HostConnection::get() New Host Connection established 0xb81a6b50, tid 2599
05-06 14:27:14.486: D/libEGL(2599): loaded /system/lib/egl/libGLESv1_CM_genymotion.so
05-06 14:27:14.486: D/libEGL(2599): loaded /system/lib/egl/libGLESv2_genymotion.so
05-06 14:27:14.530: W/EGL_genymotion(2599): eglSurfaceAttrib not implemented
05-06 14:27:14.534: E/OpenGLRenderer(2599): Getting MAX_TEXTURE_SIZE from GradienCache
05-06 14:27:14.534: E/OpenGLRenderer(2599): MAX_TEXTURE_SIZE: 16384
05-06 14:27:14.538: E/OpenGLRenderer(2599): Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
05-06 14:27:14.538: E/OpenGLRenderer(2599): MAX_TEXTURE_SIZE: 16384
05-06 14:27:14.538: D/OpenGLRenderer(2599): Enabling debug …
Run Code Online (Sandbox Code Playgroud)

java android greendao

0
推荐指数
1
解决办法
1036
查看次数

对greendao实体更新机制感到困惑

我不确定我的项目是否有问题,或者我不明白绿道是如何工作的.可能第二种选择是正确的选择.

我有以下实体:

Entity review= schema.addEntity("Review");
review.setTableName("reviews");
review.addIdProperty().primaryKey();
Property user_id = review.addLongProperty("user_id").getProperty();
Property object_id= review.addLongProperty("object_id").getProperty();
review.addStringProperty("text");

Index indexUnique = new Index();
indexUnique.addProperty(user_id);
indexUnique.addProperty(object_id);
indexUnique.makeUnique();
review.addIndex(indexUnique);
Run Code Online (Sandbox Code Playgroud)

我在字段user_id和object_id上使用了一个唯一的索引,因为我希望这两个字段作为主键使用,因为我只希望对每个用户和表中的每个对象进行一次审阅.

我第一次在数据库中插入评论时,执行以下操作:

MyEntity e=new MyEntity();
e.setText("Hello");
e.setUserId(1);
e.setObjectId(9);
myDao.insert(e); 
Run Code Online (Sandbox Code Playgroud)

一切都在那里工作.下一步是用户更新实体,我使用以下代码:

MyEntity e=new MyEntity();
e.setText("New text");
e.setUserId(1);
e.setObjectId(9);
myDao.insertOrReplaceInTx(e); 
Run Code Online (Sandbox Code Playgroud)

insertOrReplaceInTx方法无异常地工作.当我尝试使用myDao.loadAll()方法加载所有评论时,会出现问题.出现以下异常:

无法从CursorWindow读取第0行,第0列

我查看了数据库文件,问题是实体已保存到表中,但所有字段都为空,我不知道为什么.

在做了很多测试后,我设法让它工作,执行以下操作.第一次创建评论时,我也是这样做的:

MyEntity e=new MyEntity();
e.setText("New text");
e.setUserId(1);
e.setObjectId(9);
myDao.insert(e);
Run Code Online (Sandbox Code Playgroud)

稍后,如果实体已存在于数据库中(对于编辑操作),那么我加载实体,而我这样做;

MyEntity e= do a query with greendao and load the entity with user_id=1 and object_id=9//Yes I know that is pseudocode
e.setText("New text");
myDao.update(e);
Run Code Online (Sandbox Code Playgroud)

它有效,但奇怪的是我不需要调用myDao.update(e); 我已经意识到在e.setText("New …

android greendao

0
推荐指数
1
解决办法
437
查看次数

在greenDAO中使用WHERE或OR选择多个元素的简单解决方案?

我有一个主键列表,我需要从greendao数据库中获取这些元素。

最简单的方法是逐个查询每个对象并将其插入列表中:

public List<MyObject> getMyObjectByIds(List<String> ids) {
    List<MyObject> result = new ArrayList<MyObject>();

    for (String id : ids) {
        QueryBuilder<MyObject> queryBuilder = myObjectDao.queryBuilder();
        MyObject myObject = queryBuilder.where(MyObjectDao.Properties.Id.eq(id)).unique();
        result.add(myObject);
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

但是,这似乎非常无效,因为它必须执行ids.size()查询。具有多个OR语句的单个查询会更好。但是,由于whereOr()or()方法仅除了2个或更多参数外,您必须制作许多IF ELSE语句才能捕获具有0、1或2个id的列表:

public List<MyObject> getMyObjectByIds(List<String> ids) {
    QueryBuilder<MyObject> queryBuilder = myObjectDao.queryBuilder();

    if (ids.size() == 0) {
        List<MyObject> result = new ArrayList<MyObject>();
        return result;
    } else if (ids.size() == 1) {
        return queryBuilder.where(MyObjectDao.Properties.Id.eq(ids.get(0))).list();
    } else if (ids.size() == 2) {
        queryBuilder.whereOr(MyObjectDao.Properties.Id.eq(ids.get(0)), MyObjectDao.Properties.Id.eq(ids.get(1)));
        return queryBuilder.list();
    } else …
Run Code Online (Sandbox Code Playgroud)

java sqlite android greendao

0
推荐指数
1
解决办法
861
查看次数

如何使用greenDAO截断表

有谁知道如何删除greenDao中表的所有内容.我不想删除实际的表,只是删除相当于sql truncate语句的内容.

问候

java sqlite android greendao android-studio

0
推荐指数
1
解决办法
1458
查看次数

更新数据模型/类型greendao没有给出这样的列错误

我正在使用Library greendao将数据类型保存到本地数据库.设置实体并运行应用程序后,在api响应中添加了一个新属性.它变成了这样的东西.之前:

@Entity
public class Data{
    @Id
    long id;
    String name;
    String detail;
}
Run Code Online (Sandbox Code Playgroud)

后:

@Entity
public class Data{
    @Id
    long id;
    String name;
    String detail;
    String image;
  }
Run Code Online (Sandbox Code Playgroud)

更新数据类型后,我重新安装了应用程序,然后运行应用程序,但是android.database.sqlite.SQLiteException出错:没有这样的列:T.IMAGE(代码1):,编译时:SELECT T."_ id",T. "NAME",T."DETAIL",T."图像"来自"DATA"T

我该如何解决这个问题?

sqlite android greendao

0
推荐指数
1
解决办法
951
查看次数

应用程序崩溃时将minifyEnabled设置为true

我正在使用greendao + sqlcipher并helper.getEncryptedWritableDb("sdfbdfsjkdjkf"); 使用proguard 创建加密数据库并添加了规则

### greenDAO 3
-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
public static java.lang.String TABLENAME;
}
-keep class **$Properties

# If you do not use SQLCipher:
-dontwarn org.greenrobot.greendao.database.**
# If you do not use RxJava:
-dontwarn rx.**

### greenDAO 2
-keepclassmembers class * extends de.greenrobot.dao.AbstractDao {
public static java.lang.String TABLENAME;
}
-keep class **$Properties




#######################################################################






-keep public class net.sqlcipher.** {
    *;
}

-keep public class net.sqlcipher.database.** {
    *;
}
Run Code Online (Sandbox Code Playgroud)

我将minifyEnabled设置为true的那一刻.我的应用程序在安装后启动时崩溃.

debug {


            shrinkResources false
            minifyEnabled false …
Run Code Online (Sandbox Code Playgroud)

java-native-interface android sqlcipher greendao android-proguard

-1
推荐指数
1
解决办法
844
查看次数

如何使用GreenDao从SQLite数据库中获取数据

我是第一次使用greendao.它很好.我已经生成了代码和实体.我已经放了基本数据并使用sqlite浏览器进行了检查,所有数据都在特定字段中.

现在在dao类中有一些方法,我使用了insert方法来插入数据.但现在我必须获取数据,以便查看如何返回数据.这是我的一些问题:

  1. 如何获取数据?

  2. 那里有内置的方法吗?或者我需要自己做什么?

  3. 我需要知道何时需要关闭连接以及在使用greendao时我需要考虑哪些事项?

请提供一些关于如何获取数据的源代码或任何演示代码.我没有共享的源代码,因为其余是由dao生成的基本代码.我认为这将是幼稚的问题,但我没有找到任何文件说明它的方法等.请帮助我解决上述问题并清除我的困惑.

android android-sqlite greendao

-2
推荐指数
1
解决办法
2530
查看次数