我一直在尝试让 Nativescript 与 SQLite 和我运行 Nougat (7.1.2)、SDK 25 的外部设备配合使用。
我收到以下错误:
错误:java.lang.NoClassDefFoundError:android.database.sqlite.SQLiteDatabase$OpenParams
我有一个扩展SQLiteOpenHelper
的类
class DatabaseHelper extends android.database.sqlite.SQLiteOpenHelper {
static constructorCalled: boolean = false;
constructor(context: android.content.Context) {
super(context, '/data/user/0/org.nativescript.synctest/databases/swiftr.sqlite', null, 2);
DatabaseHelper.constructorCalled = true;
return global.__native(this);
}
onCreate(db: android.database.sqlite.SQLiteDatabase) { }
onUpdate(
db: android.database.sqlite.SQLiteDatabase,
oldVersion: number,
newVersion: number
) { }
}
我正在尝试像这样打开 SQLite 数据库:
const mOpenHelper: android.database.sqlite.SQLiteOpenHelper = new DatabaseHelper(application.android.context);
const sql = "SELECT name FROM sqlite_master WHERE type ='table' AND name NOT LIKE '%sqlite_%'";
const cursor = mOpenHelper.getReadableDatabase().rawQuery(sql, null);
const tables: string[] = [];
if (cursor.moveToFirst()) {
while (!cursor.isAfterLast() ) {
tables.push(cursor.getString(cursor.getColumnIndex('name')));
}
}
console.log('Tables: ', [tables]);
然后,当我尝试在组件中使用此类时,出现错误,
错误:java.lang.NoClassDefFoundError:android.database.sqlite.SQLiteDatabase$OpenParams
我做了一些挖掘,发现 SQLiteDatabase$OpenParams
仅在版本 27 中添加到 SDK 中。然后我尝试在 中设置
到 25,现在我收到以下错误:compileSdkVersion
app.gradle
应用程序.gradle:
android {
compileSdkVersion 25
defaultConfig {
minSdkVersion 25
generatedDensities = []
}
aaptOptions {
additionalParameters "--no-version-vectors"
}
}
错误:
AAPT:错误:找不到样式属性“android:attr/forceDarkAllowed”。
AAPT:错误:找不到资源 android:attr/colorError。
AAPT:错误:找不到样式属性“android:attr/keyboardNavigationCluster”。
这里我只列出了三个,但数量很多。
有人可以帮我解决这个问题吗...我真的很难解决这个问题。
提前致谢。
最佳答案
您无法更改编译 SDK 版本,它必须是具有最新版本 NativeScript (6.x) 的 Android Q。
此外,您也不能使用您的设备中不可用的 API。如果您的设备运行的是 Android 7.x,则无法使用实际上仅在 Android 8.x(API 级别 27)上引入的 API 方法。
如果您打算使用的 API 可能在您的应用支持的操作系统版本之一中不可用,那么您应该有条件地运行它。在这里您将检查平台版本是否 >= 27 并运行特定代码。
关于java - 无法在 Nativescript 和外部设备 SDK 25、Android 7.1.2 中使用 SQLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58875663/