gpt4 book ai didi

java - SQLite DbHelper 不适用于 ART

转载 作者:行者123 更新时间:2023-12-03 18:15:18 25 4
gpt4 key购买 nike

我的 android 应用程序中有一个 SQLite 数据库,但不幸的是,使用新的虚拟机 ART 它停止工作。
我在 DbHelper 类中遇到错误,特别是当我打开数据库以写入/读取它时。

我需要帮助!提前致谢!

这是日志猫:

11-22 11:57:05.600: E/AndroidRuntime(1435): FATAL EXCEPTION: main
11-22 11:57:05.600: E/AndroidRuntime(1435): Process: com.itc.zappapp, PID: 1435
11-22 11:57:05.600: E/AndroidRuntime(1435): java.lang.VerifyError: Rejecting class com.itc.zappapp.database.database_zappapp$DbHelper because it failed compile-time verification (declaration of 'com.itc.zappapp.database.database_zappapp$DbHelper' appears in /data/app/com.itc.zappapp-1/base.apk)
11-22 11:57:05.600: E/AndroidRuntime(1435):at com.itc.zappapp.database.database_zappapp.open(database_zappapp.java:19530)
11-22 11:57:05.600: E/AndroidRuntime(1435):at com.itc.zappapp.Activity_Head.Activity_Splash.onCreate(Activity_Splash.java:75)
11-22 11:57:05.600: E/AndroidRuntime(1435): at android.app.Activity.performCreate(Activity.java:5933)
11-22 11:57:05.600: E/AndroidRuntime(1435): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
11-22 11:57:05.600: E/AndroidRuntime(1435): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)

编辑:
db 与 Davic 虚拟机完美配合。

这是 DbHelper 的代码:
// versione iniziale
private static final int DATABASE_VERSION = 1;

private DbHelper ourHelper;
private final Context ourContext;
public SQLiteDatabase ourDatabase;

private static class DbHelper extends SQLiteOpenHelper {

public DbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}

//SOME INSERTS.......

@Override
public void onCreate(SQLiteDatabase db) {
//SOME ON CREATE........

insert();

//some updates...




}



@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//some drop table.....
onCreate(db);

}

}

public database_zappapp(Context c) {
ourContext = c;
}

public database_zappapp open() throws SQLException {

ourHelper = new DbHelper(ourContext); <--------- The error is here!!
ourDatabase = ourHelper.getWritableDatabase();
return this;
}

public void close() {

ourHelper.close();

}

最佳答案

我有错误:
java.lang.VerifyError: Rejecting class com.ford.syncV4.android.module.ModuleTest 因为它未能通过编译时验证('com.ford.syncV4.android.module.ModuleTest' 的声明出现在/data/app/com .ford.syncV4.android-1/base.apk)
顺便说一下,这个错误发生在 Android OS 5.0.1。
对我来说错的是:

try {
synchronized (this) {
this.wait(100);
}
} catch (InterruptedException e) {
/* Exception message can be captured here */
}
!! try/catch block 内的同步块(synchronized block)!
当我在同步块(synchronized block)内设置 try/catch 时 - 应用程序开始照常工作。顺便说一句,在 Android OS 5.0.1 之前,这种方法没有问题。我认为这是因为新的 ART 编译器。
因此,正确的代码如下所示:
synchronized (this) {
try {
this.wait(testActionItem.getDelay());
} catch (InterruptedException e) {
/* Exception message can be captured here */
}
}
此外,在 Android 问题跟踪器中触发了一个问题:
Issue 80961

关于java - SQLite DbHelper 不适用于 ART,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27076759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com