java - 无法在 Nativescript 和外部设备 SDK 25、Android 7.1.2 中使用 SQLite

标签 java android sqlite nativescript

我一直在尝试让 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 中。然后我尝试在 中设置 compileSdkVersion app.gradle 到 25,现在我收到以下错误:

应用程序.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/

相关文章:

java - java中默认构造函数的访问修饰符是什么?

java - FlowingDrawer 示例不运行

android - 在 Android 中管理 SQLite 连接

sqlite - SQLite 是否对其数据进行校验和?

java - 找不到适合 Oracle 数据库连接的驱动程序

java - 通过多次调用重新绘制来自定义绘制 Swing 组件

java - Mapreduce java 程序搜索 QuadTree 索引并运行 GeometryEngine.contains 以使用 wkt 文件确认多边形中的点

android - 如何使用 gradle 构建文件从 Android 上的 org.apache 正确导入 HttpClient?

java - Android Realm 中的一对多关系。处理线程

android - 混合两个试图获取总量的 sqlite 查询