相关疑难解决方法(0)

Android Room Persistences库和Kotlin

我正在尝试使用Kotlin和Room Persistance Library编写一个简单的应用程序.我按照Android Persistance codelab中的教程进行操作.

这是我AppDatabase在Kotlin的课程:

@Database(entities = arrayOf(User::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userModel(): UserDao

    companion object {
        private var INSTANCE: AppDatabase? = null
        @JvmStatic fun getInMemoryDatabase(context: Context): AppDatabase {
            if (INSTANCE == null) {
                INSTANCE = Room.inMemoryDatabaseBuilder(context.applicationContext, AppDatabase::class.java).allowMainThreadQueries().build()
            }
            return INSTANCE!!
        }

        @JvmStatic fun destroyInstance() {
            INSTANCE = null
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我试图运行应用程序时,它会立即崩溃.这是崩溃日志:

Caused by: java.lang.RuntimeException: cannot find implementation for com.ttp.kotlin.kotlinsample.room.AppDatabase. AppDatabase_Impl does not exist
    at …
Run Code Online (Sandbox Code Playgroud)

database kotlin kapt android-room

54
推荐指数
3
解决办法
2万
查看次数

Kotlin中的Room Persistence lib实现(Gradle错误)

我正在kotlin中实现Room persistence lib来实现我的数据库.在Android Room Persistences库和Kotlin线程中询问相同的问题,应用这些解决方案会导致不同的gradle错误:

以下是我的Entity,DaoDatabase类:

Food.kt

@Entity
class Food(@ColumnInfo(name = "food_name") var foodName: String,
           @ColumnInfo(name = "food_desc") var foodDesc: String,
           @ColumnInfo(name = "protein") var protein: Double,
           @ColumnInfo(name = "carbs") var carbs: Double,
           @ColumnInfo(name = "fat") var fat: Double)
{
    @ColumnInfo(name = "id")
    @PrimaryKey(autoGenerate = true)
    var id: Long = 0
    @ColumnInfo(name = "calories")
    var calories: Double = 0.toDouble()
}
Run Code Online (Sandbox Code Playgroud)

PersonalizedFood.kt

@Entity(primaryKeys = arrayOf("food_id","date"))
class PersonalizedFood(@ColumnInfo(name = "quantity") var quantity: Int,
                       @ColumnInfo(name …
Run Code Online (Sandbox Code Playgroud)

android kotlin

5
推荐指数
1
解决办法
4596
查看次数

Android Gradle annotationProcessor 在父模块中不可用

我有以下设置:

项目A build.grade:

dependencies {
    compile (project(':ProjectB'))
}
Run Code Online (Sandbox Code Playgroud)

项目B build.gradle:

dependencies {
    annotationProcessor 'com.ryanharter.auto.value:auto-value-parcel:0.2.5'
    compile "com.google.auto.value:auto-value:1.3"
    annotationProcessor "com.google.auto.value:auto-value:1.3"
}
Run Code Online (Sandbox Code Playgroud)

SomeClass在项目A,而实现Parcelable

@AutoValue
public abstract class SomeClass implements Parcelable {
...
}
Run Code Online (Sandbox Code Playgroud)

AutoValue 不会在 AutoValue_SomeClass 中生成任何 Parcelable 相关的方法。

但是,如果我将 auto-value-parcel annotationProcessor 直接包含到 ProjectA 中,问题就解决了。

项目A build.grade:

dependencies {
    compile (project(':projectB'))
    annotationProcessor 'com.ryanharter.auto.value:auto-value-parcel:0.2.5'
}
Run Code Online (Sandbox Code Playgroud)

谁能解释一下auto-value-parcelannotationProcessor 是如何从 ProjectA 中排除的?

android gradle auto-value

4
推荐指数
1
解决办法
1983
查看次数

房间持久化AppDatabase_Impl不存在android

我已经实现了房间持久性来存储通知,但它在日志下面抛出异常,对于 builde

implementation for modules.room_db.AppDatabase. AppDatabase_Impl does not exist
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
        at android.app.ActivityThread.access$800(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5001)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.RuntimeException: cannot find implementation for modules.room_db.AppDatabase. AppDatabase_Impl does not exist
        at android.arch.persistence.room.Room.getGeneratedImplementation(Room.java:92)
        at android.arch.persistence.room.RoomDatabase$Builder.build(RoomDatabase.java:454)
        at modules.room_db.AppDatabase.getAppDatabase(AppDatabase.java:23)
        at MypackageName.SplashActivity.onCreate(SplashActivity.java:46)
        at android.app.Activity.performCreate(Activity.java:5231)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
Run Code Online (Sandbox Code Playgroud)

店铺通知

AppDatabase.getAppDatabase(getApplicationContext()).userDao().insertNotification(notificationDetail);
Run Code Online (Sandbox Code Playgroud)

格拉德

 implementation 'android.arch.persistence.room:runtime:1.0.0'
    annotationProcessor    'android.arch.persistence.room:compiler:1.0.0'
    androidTestImplementation 'android.arch.persistence.room:testing:1.0.0'
Run Code Online (Sandbox Code Playgroud)

应用数据库.java

public abstract class AppDatabase extends RoomDatabase {

    private static …
Run Code Online (Sandbox Code Playgroud)

android android-room

4
推荐指数
1
解决办法
7828
查看次数

标签 统计

android ×3

android-room ×2

kotlin ×2

auto-value ×1

database ×1

gradle ×1

kapt ×1