更新到Android Studio 2.3后,尝试构建项目会导致构建失败.
任务':app:greendao'的执行失败.org.eclipse.jdt.internal.compiler.impl.CompilerOptions.versionToJdkLevel(Ljava /郎/对象;).J
如何解决这个问题?
在我的应用程序中,有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 …
使用绿色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代码才能实现这一目标?(任何代码示例都很受欢迎)
提前致谢
为什么在生成库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) 今天早上我升级了 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第三方插件上。
有谁知道如何解决这个问题?
我有个问题.我正在学习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) 我不确定我的项目是否有问题,或者我不明白绿道是如何工作的.可能第二种选择是正确的选择.
我有以下实体:
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 …
我有一个主键列表,我需要从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) 有谁知道如何删除greenDao中表的所有内容.我不想删除实际的表,只是删除相当于sql truncate语句的内容.
问候
我正在使用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
我该如何解决这个问题?
我正在使用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
我是第一次使用greendao.它很好.我已经生成了代码和实体.我已经放了基本数据并使用sqlite浏览器进行了检查,所有数据都在特定字段中.
现在在dao类中有一些方法,我使用了insert方法来插入数据.但现在我必须获取数据,以便查看如何返回数据.这是我的一些问题:
如何获取数据?
那里有内置的方法吗?或者我需要自己做什么?
我需要知道何时需要关闭连接以及在使用greendao时我需要考虑哪些事项?
请提供一些关于如何获取数据的源代码或任何演示代码.我没有共享的源代码,因为其余是由dao生成的基本代码.我认为这将是幼稚的问题,但我没有找到任何文件说明它的方法等.请帮助我解决上述问题并清除我的困惑.