Olivier labelle
Olivier labelle

Reputation: 345

Error when compiling my Room database

I'm writing a small apps to log daily Transaction, when trying to create a Room Database i followed some guide around then switched the variable to fit my need. Thing is i get weird Dao compile error.

Here's the error code;

Executing tasks: [clean, :app:assembleDebug]

Configuration on demand is an incubating feature.
app: 'annotationProcessor' dependencies won't be recognized as kapt annotation processors. Please change the configuration name to 'kapt' for these artifacts: 'com.android.databinding:compiler:3.1.0'.
:clean
:app:clean
:app:preBuild UP-TO-DATE
:app:preDebugBuild
:app:compileDebugAidl
:app:compileDebugRenderscript
:app:generateDebugResValues
:app:generateDebugResources
:app:mergeDebugResources
:app:transformDataBindingBaseClassLogWithDataBindingMergeGenClassesForDebug
:app:dataBindingGenBaseClassesDebug
:app:checkDebugManifest
:app:generateDebugBuildConfig
:app:prepareLintJar UP-TO-DATE
:app:mainApkListPersistenceDebug
:app:createDebugCompatibleScreenManifests
:app:processDebugManifest
:app:splitsDiscoveryTaskDebug
:app:processDebugResources
:app:generateDebugSources
:app:dataBindingExportBuildInfoDebug
:app:kaptGenerateStubsDebugKotlin
:app:transformDataBindingWithDataBindingMergeArtifactsForDebug
:app:kaptDebugKotlin
w: warning: Supported source version 'RELEASE_7' from annotation processor 'org.jetbrains.kotlin.kapt3.ProcessorWrapper' less than -source '1.8'
w: /Users/olivier/StudioProjects/BudgetProject/app/build/tmp/kapt3/stubs/debug/com/example/android/budgetproject/Transaction.java:7: warning: There are multiple good constructors and Room will pick the no-arg constructor. You can use the @Ignore annotation to eliminate unwanted constructors.
public final class Transaction {
             ^
e: error: Entities and Pojos must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type).
e: /Users/olivier/StudioProjects/BudgetProject/app/build/tmp/kapt3/stubs/debug/com/example/android/budgetproject/TransactionDao.java:11: error: Not sure how to convert a Cursor to this method's return type
    public abstract java.util.List<android.arch.persistence.room.Transaction> getAllTransaction();
                                                                              ^
w: /Users/olivier/StudioProjects/BudgetProject/app/build/tmp/kapt3/stubs/debug/com/example/android/budgetproject/TransactionDao.java:11: warning: The query returns some columns [depense, description, date, uid] which are not use by android.arch.persistence.room.Transaction. You can use @ColumnInfo annotation on the fields to specify the mapping.  You can suppress this warning by annotating the method with @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH). Columns returned by the query: depense, description, date, uid. Fields in android.arch.persistence.room.Transaction: .
    public abstract java.util.List<android.arch.persistence.room.Transaction> getAllTransaction();
                                                                              ^
w: /Users/olivier/StudioProjects/BudgetProject/app/build/tmp/kapt3/stubs/debug/com/example/android/budgetproject/TransactionDao.java:15: warning: The query returns some columns [depense, description, date, uid] which are not use by android.arch.persistence.room.Transaction. You can use @ColumnInfo annotation on the fields to specify the mapping.  You can suppress this warning by annotating the method with @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH). Columns returned by the query: depense, description, date, uid. Fields in android.arch.persistence.room.Transaction: .
    public abstract java.util.List<android.arch.persistence.room.Transaction> findTransactionById(@org.jetbrains.annotations.NotNull()
                                                                              ^
e: /Users/olivier/StudioProjects/BudgetProject/app/build/tmp/kapt3/stubs/debug/com/example/android/budgetproject/TransactionDao.java:15: error: Not sure how to convert a Cursor to this method's return type
    public abstract java.util.List<android.arch.persistence.room.Transaction> findTransactionById(@org.jetbrains.annotations.NotNull()
                                                                              ^
e: /Users/olivier/StudioProjects/BudgetProject/app/build/tmp/kapt3/stubs/debug/com/example/android/budgetproject/TransactionDao.java:20: error: Type of the parameter must be a class annotated with @Entity or a collection/array of it.
    android.arch.persistence.room.Transaction transaction);
                                              ^
e: /Users/olivier/StudioProjects/BudgetProject/app/build/tmp/kapt3/stubs/debug/com/example/android/budgetproject/TransactionDao.java:24: error: Type of the parameter must be a class annotated with @Entity or a collection/array of it.
    android.arch.persistence.room.Transaction transaction);
                                              ^
w: /Users/olivier/StudioProjects/BudgetProject/app/build/tmp/kapt3/stubs/debug/com/example/android/budgetproject/MyDatabase.java:7: warning: Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide `room.schemaLocation` annotation processor argument OR set exportSchema to false.
public abstract class MyDatabase extends android.arch.persistence.room.RoomDatabase {
                ^
:app:kaptDebugKotlin FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> Compilation error. See log for more details

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 11s
21 actionable tasks: 20 executed, 1 up-to-date

Dao code

package com.example.android.budgetproject;


import android.arch.persistence.room.*
import android.arch.persistence.room.Transaction
import android.arch.persistence.room.Delete
import android.arch.persistence.room.Dao

@Dao
interface TransactionDao {

    @Query("SELECT * FROM `transaction`")
    fun getAllTransaction(): List<Transaction>

    @Query("SELECT * FROM `transaction` where uid IN (:transactionId)")
    fun findTransactionById(transactionId: IntArray): List<Transaction>

    @Insert(onConflict = 1)
    fun insertTransaction(transaction: Transaction)

    @Delete
    fun deleteTransaction(transaction: Transaction)
}

And just in case:

package com.example.android.budgetproject

import android.arch.persistence.room.ColumnInfo
import android.arch.persistence.room.Entity
import android.arch.persistence.room.PrimaryKey

@Entity(tableName = "transaction")
data class Transaction(
        @ColumnInfo(name = "depense") var depense: String = "",
        @ColumnInfo(name = "description") var description: String = "",
        @ColumnInfo(name = "date") var date: String = "",
        @PrimaryKey(autoGenerate = true) var uid: Long = 0)

Also here's a link to one of the guide i was following, https://medium.com/@ajaysaini.official/building-database-with-room-persistence-library-ecf7d0b8f3e9

Hopefuly my problem is not into my manifest. but let me know if you think it could be a wrong dependancie i will had quickly my manifest to this post.

Upvotes: 2

Views: 3799

Answers (1)

JavierSA
JavierSA

Reputation: 801

In your DAO, you are importing this:

import android.arch.persistence.room.Transaction

You should import your entity Transaction instead of the Room class.

Upvotes: 3

Related Questions