【问题标题】:kotlin problem with shared lib with database and kapt与数据库和 kapt 共享库的 kotlin 问题
【发布时间】:2021-12-13 12:51:56
【问题描述】:

您好,我编写了一个共享库,并将其导入到新项目中。在这个库中有任何常见的想法,如登录用户、设置等......但是当我将它导入新项目时。编译有问题,返回

C:\Users\jirasek.ondrej\AndroidStudioProjects\LIBRARY\NvmesAppLibrary\build\tmp\kapt3\stubs\debug\com\nvsp\nvmesapplibrary\database\LibDao.java:49: error: Query method parameters should either be a type that can be converted into a database column or a List / Array that contains such type. You can consider adding a Type Adapter for this.
    kotlin.coroutines.Continuation<java.lang.Integer> continuation);
                                                      ^
C:\Users\jirasek.ondrej\AndroidStudioProjects\LIBRARY\NvmesAppLibrary\build\tmp\kapt3\stubs\debug\com\nvsp\nvmesapplibrary\database\LibDao.java:47: error: Unused parameter: continuation
    public abstract java.lang.Object deleteUserByApp(@org.jetbrains.annotations.NotNull()
                                     ^
C:\Users\jirasek.ondrej\AndroidStudioProjects\LIBRARY\NvmesAppLibrary\build\tmp\kapt3\stubs\debug\com\nvsp\nvmesapplibrary\database\LibDao.java:70: error: Query method parameters should either be a type that can be converted into a database column or a List / Array that contains such type. You can consider adding a Type Adapter for this.
    kotlin.coroutines.Continuation<? super kotlin.Unit> continuation);
                                                        ^
C:\Users\jirasek.ondrej\AndroidStudioProjects\LIBRARY\NvmesAppLibrary\build\tmp\kapt3\stubs\debug\com\nvsp\nvmesapplibrary\database\LibDao.java:68: error: Unused parameter: continuation
    public abstract java.lang.Object disableActive(@org.jetbrains.annotations.NotNull()
                                     ^
C:\Users\jirasek.ondrej\AndroidStudioProjects\LIBRARY\NvmesAppLibrary\build\tmp\kapt3\stubs\debug\com\nvsp\nvmesapplibrary\database\LibDao.java:77: error: Query method parameters should either be a type that can be converted into a database column or a List / Array that contains such type. You can consider adding a Type Adapter for this.
    kotlin.coroutines.Continuation<? super kotlin.Unit> continuation);
                                                        ^
C:\Users\jirasek.ondrej\AndroidStudioProjects\LIBRARY\NvmesAppLibrary\build\tmp\kapt3\stubs\debug\com\nvsp\nvmesapplibrary\database\LibDao.java:74: error: Unused parameter: continuation
    public abstract java.lang.Object setActive(@org.jetbrains.annotations.NotNull()
                                     ^
C:\Users\jirasek.ondrej\AndroidStudioProjects\LIBRARY\NvmesAppLibrary\build\tmp\kapt3\stubs\debug\com\nvsp\nvmesapplibrary\database\LibDao.java:83: error: Query method parameters should either be a type that can be converted into a database column or a List / Array that contains such type. You can consider adding a Type Adapter for this.
    kotlin.coroutines.Continuation<? super kotlin.Unit> continuation);
                                                        ^
C:\Users\jirasek.ondrej\AndroidStudioProjects\LIBRARY\NvmesAppLibrary\build\tmp\kapt3\stubs\debug\com\nvsp\nvmesapplibrary\database\LibDao.java:81: error: Unused parameter: continuation
    public abstract java.lang.Object setAlternativeActive(@org.jetbrains.annotations.NotNull()
                                     ^
C:\Users\jirasek.ondrej\AndroidStudioProjects\LIBRARY\NvmesAppLibrary\build\tmp\kapt3\stubs\debug\com\nvsp\nvmesapplibrary\database\LibDao.java:18: error: Type of the parameter must be a class annotated with @Entity or a collection/array of it.
    kotlin.coroutines.Continuation<? super java.lang.Long> continuation);
                                                           ^
C:\Users\jirasek.ondrej\AndroidStudioProjects\LIBRARY\NvmesAppLibrary\build\tmp\kapt3\stubs\debug\com\nvsp\nvmesapplibrary\database\LibDao.java:16: error: Not sure how to handle insert method's return type.
    public abstract java.lang.Object insertUser(@org.jetbrains.annotations.NotNull()
                                     ^
C:\Users\jirasek.ondrej\AndroidStudioProjects\LIBRARY\NvmesAppLibrary\build\tmp\kapt3\stubs\debug\com\nvsp\nvmesapplibrary\database\LibDao.java:30: error: Type of the parameter must be a class annotated with @Entity or a collection/array of it.
    kotlin.coroutines.Continuation<? super java.lang.Long> continuation);
                                                           ^
C:\Users\jirasek.ondrej\AndroidStudioProjects\LIBRARY\NvmesAppLibrary\build\tmp\kapt3\stubs\debug\com\nvsp\nvmesapplibrary\database\LibDao.java:28: error: Not sure how to handle insert method's return type.
    public abstract java.lang.Object insertSetting(@org.jetbrains.annotations.NotNull()
                                     ^
C:\Users\jirasek.ondrej\AndroidStudioProjects\LIBRARY\NvmesAppLibrary\build\tmp\kapt3\stubs\debug\com\nvsp\nvmesapplibrary\database\LibDao.java:24: error: Type of the parameter must be a class annotated with @Entity or a collection/array of it.
    kotlin.coroutines.Continuation<? super kotlin.Unit> continuation);
                                                        ^
C:\Users\jirasek.ondrej\AndroidStudioProjects\LIBRARY\NvmesAppLibrary\build\tmp\kapt3\stubs\debug\com\nvsp\nvmesapplibrary\database\LibDao.java:36: error: Type of the parameter must be a class annotated with @Entity or a collection/array of it.
    kotlin.coroutines.Continuation<? super kotlin.Unit> continuation);
                                                        ^
C:\Users\jirasek.ondrej\AndroidStudioProjects\LIBRARY\NvmesAppLibrary\build\tmp\kapt3\stubs\debug\com\nvsp\nvmesapplibrary\database\LibDao.java:42: error: Type of the parameter must be a class annotated with @Entity or a collection/array of it.
    kotlin.coroutines.Continuation<? super kotlin.Unit> continuation);
                                                        ^

但 gradle 文件设置相同。

Gradle 库:

plugins {
    id 'com.android.library'
    id 'kotlin-android'
    id 'kotlin-kapt'
    id("androidx.navigation.safeargs.kotlin")
}
kapt { strictMode = true }
android {
    compileSdkVersion 30

    defaultConfig {
        minSdkVersion 23
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles "consumer-rules.pro"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    buildFeatures {
        viewBinding = true
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {

    implementation 'androidx.core:core-ktx:1.6.0'
    implementation 'androidx.appcompat:appcompat:1.3.1'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.annotation:annotation:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'



    //Lottie Animation
    implementation 'com.airbnb.android:lottie:3.4.0'

//navigation
    def nav_version = "2.3.5"
    implementation("androidx.navigation:navigation-fragment-ktx:$nav_version")
    implementation("androidx.navigation:navigation-ui-ktx:$nav_version")

// Room
    implementation 'androidx.room:room-ktx:2.3.0'
    implementation 'androidx.room:room-rxjava2:2.3.0'
    kapt "androidx.room:room-compiler:2.3.0"
    implementation 'androidx.room:room-runtime:2.3.0'
// End room


    //  Koin DI
    implementation "org.koin:koin-android:2.2.2"
    implementation "org.koin:koin-android-scope:2.2.2"
    implementation "org.koin:koin-android-viewmodel:2.2.2"
    implementation "org.koin:koin-android-ext:2.2.2"

    def arch_version = '2.3.0'

    //implementation "androidx.lifecycle:lifecycle-extensions-ktx:$arch_version"
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$arch_version"
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:$arch_version"
    implementation "androidx.lifecycle:lifecycle-runtime-ktx:$arch_version"

    implementation 'com.toptoche.searchablespinner:searchablespinnerlibrary:1.3.1'

    implementation 'com.google.zxing:core:3.4.0'
    implementation 'com.journeyapps:zxing-android-embedded:3.6.0'

    //GSON
    implementation 'com.google.code.gson:gson:2.8.8'
    //Volley
    implementation("com.android.volley:volley:1.2.1")

    //color Picker
    implementation 'petrov.kristiyan:colorpicker-library:1.1.10'
}

和 gradle 应用程序

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'
}

android {
    compileSdk 30

    defaultConfig {
        applicationId "com.nvsp.kontrola_nakladu"
        minSdk 23
        targetSdk 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        debug {
            resValue("string", "PORT_NUMBER", "8081")
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    buildFeatures {
        viewBinding true
    }
}

dependencies {
    implementation project(':NvmesAppLibrary')

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.4.0'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
    implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
    implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

    //  Koin DI
    implementation "org.koin:koin-android:2.2.2"
    implementation "org.koin:koin-android-scope:2.2.2"
    implementation "org.koin:koin-android-viewmodel:2.2.2"
    implementation "org.koin:koin-android-ext:2.2.2"
// End Koin
    // Room
    // implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
    // implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
    implementation 'androidx.room:room-ktx:2.3.0'

    kapt  "androidx.room:room-compiler:2.3.0"
    implementation 'androidx.room:room-runtime:2.3.0'
 //   implementation "androidx.room:room-rxjava2:2.3.0"
    debugImplementation 'com.amitshekhar.android:debug-db:1.0.6'
// End room
    //Volley
    implementation("com.android.volley:volley:1.2.1")
    //GSON
    implementation 'com.google.code.gson:gson:2.8.8'

    implementation 'com.amitshekhar.android:debug-db:1.0.6'

    //implementation('org.jetbrains:annotations:13.0')
    implementation("org.jetbrains:annotations:15.0")



}

和libDao

package com.nvsp.nvmesapplibrary.database

import androidx.lifecycle.LiveData


import androidx.room.*
import com.nvsp.nvmesapplibrary.login.models.User
import com.nvsp.nvmesapplibrary.settings.models.Settings

@Dao
interface LibDao {
    @Query("SELECT * FROM users where loggingApp=:idApp ")
    fun getUser(idApp: String): LiveData<User?>

    @Insert
    suspend fun insertUser(user: User): Long

    @Delete
    suspend fun deleteUser(user: User)

    @Insert
    suspend fun insertSetting(settings: Settings): Long

    @Delete
    suspend fun deleteSetting(settings: Settings)

    @Update
    suspend fun updateSetting(settings: Settings)

    @Query("Delete FROM users where loggingApp=:idApp")
    @JvmSuppressWildcards
    suspend fun deleteUserByApp(idApp: String):Int

    @Query("SELECT * FROM Settings where appID=:idApp and active= 1")
    fun getActiveSetting(idApp: String): LiveData<Settings?>

    @Query("SELECT * FROM Settings where appID=:idApp and active= 1")
    fun getActiveSettingFun(idApp: String): Settings

    @Query("SELECT * FROM Settings where appID=:idApp ORDER BY active DESC")
    fun getAllSettings(idApp: String): LiveData<MutableList<Settings>>

    @Query("UPDATE Settings SET active=0 where appID=:idApp and active= 1")
    suspend fun disableActive(idApp: String)

    @Query("UPDATE Settings SET active=1 where appID=:idApp and id=:id")
    suspend fun setActive(idApp: String, id: Long?)

    @Query("UPDATE Settings SET active=1 where appID=:idApp and id=(SELECT MIN(id) FROM SETTINGS WHERE appID=:idApp )")
    suspend fun setAlternativeActive(idApp: String)
}

有谁知道怎么解决吗? 非常感谢

【问题讨论】:

    标签: database kotlin android-room kapt


    【解决方案1】:

    请执行以下步骤:

    1. 将所有 gradle 文件中的 all Room 依赖项从版本 2.3.0 更新为 2.4.0-rc01
    2. 在 Android Studio 中执行以下操作:Go to File > Invalidate Caches/Restart
    3. 然后尝试运行应用程序

    当前的Room 版本似乎存在问题。
    但是在即将发布的版本2.4.0 中,很多与TypeConverter 相关的错误已得到修复。

    注意:版本 2.4.0-rc01 不是稳定版本。
    因此,请不要在生产环境中使用它。

    【讨论】:

      猜你喜欢
      • 2015-10-20
      • 2019-04-19
      • 2016-01-02
      • 2012-01-14
      • 2015-11-21
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多