[英]Can't use SQLite in Nativescript and external device SDK 25, Android 7.1.2
我一直在嘗試讓 Nativescript 與 SQLite 和我運行 Nougat (7.1.2)、SDK 25 的外部設備一起使用。
我收到以下錯誤:
Error: java.lang.NoClassDefFoundError: android.database.sqlite.SQLiteDatabase$OpenParams
我有一個擴展 SQLiteOpenHelper 的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]);
Then when I try to use this class in a component, I get the error, Error: java.lang.NoClassDefFoundError: android.database.sqlite.SQLiteDatabase$OpenParams
我做了一些挖掘,發現SQLiteDatabase$OpenParams
僅在版本 27 中添加到 SDK 中。然后我嘗試將compileSdkVersion
中的app.gradle
設置為 25,現在我收到以下錯誤:
app.gradle:
android {
compileSdkVersion 25
defaultConfig {
minSdkVersion 25
generatedDensities = []
}
aaptOptions {
additionalParameters "--no-version-vectors"
}
}
錯誤:
AAPT: error: style attribute 'android:attr/forceDarkAllowed' not found.
AAPT: error: resource android:attr/colorError not found.
AAPT: error: style attribute 'android:attr/keyboardNavigationCluster' not found.
這里我只列出了三個,但其中有很多。
誰能幫我解決這個問題......我真的很難解決這個問題。
提前致謝。
您不能更改編譯 SDK 版本,它必須是 Android Q 與最新版本的 NativeScript (6.x)。
此外,您不能使用您的設備中不可用的 API。 如果您的設備運行的是 Android 7.x,則不能使用僅在 Android 8.x(API 級別 27)上實際引入的 API 方法。
如果您打算使用在您的應用支持的操作系統版本之一中可能不可用的 API,那么您應該有條件地運行它。 在這里,您將檢查平台版本是否 >= 27 並運行特定代碼。
好的,所以我通過使用SQLite Android Bindings
結束了解決這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.