2017-06-13 3 views
10

Basis auf meiner vorherigen Frage (Android Persistence room: "Cannot figure out how to read this field from a cursor"), die ich dank der Rückmeldung arbeiten musste, habe ich das gleiche Beispiel in Kolin implementiert (siehe Code unten). Ich musste einige kleinere Änderungen wie die Parameter vornehmen, die jetzt an eine Abfrage übergeben werden, die als "p0", "p1" usw. weitergegeben werden müssen. Jetzt in Kotlin erhalte ich den folgenden Fehler in Bezug auf die Klasse UserWithPets:Raumpersistenz @Relation arbeiten in Java aber nicht in Kolin

Fehler: Kann nicht herausfinden, wie dieses Feld von einem Cursor gelesen wird. e: private java.util.List Haustiere;

@Dao 
interface UserDAO { 

    @get:Query("SELECT * FROM user") 
    val all: LiveData<List<User>> 

    @Insert 
    fun insertUser(user: User) //single one 

    @Insert(onConflict = OnConflictStrategy.REPLACE) 
    fun insertUsers(vararg users: User) 

    @Query("SELECT * FROM User") 
    fun loadUsersWithPets(): LiveData<List<UserWithPets>> 

} 


@Entity 
class Pet(var name: String?, var ownerId: Int,@PrimaryKey(autoGenerate = true)var id:Int) 



@Dao 
interface PetDAO { 
    @Query("SELECT * FROM pet") 
    val all: List<Pet> 

    @Query("SELECT * FROM pet WHERE id IN (:p0)") 
    fun loadAllByIds(petIds: IntArray): List<Pet> 


    @Insert 
    fun insert(pet: Pet) 

    @Insert 
    fun insertAll(vararg pets: Pet) 

    @Delete 
    fun delete(user: Pet) 
} 


class UserWithPets { 
    @Embedded 
    var user: User? = null 

    @Relation(parentColumn = "id", entityColumn = "ownerId", entity = Pet::class) 
    var pets: List<Pet>? = null 
} 

Es scheint, dass, wenn ich die UserWithPets Klasse in Java schreiben, wird es funktionieren, aber nicht, wenn es in Kotlin geschrieben. Irgendwelche Ideen was ist falsch? Ist dies ein Problem bei der Verarbeitung von Anmerkungen?

+0

Versuchen Sie 'List <@JvmSuppressWildcards Pet>'. Docs: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-jvm-suppress-wildcards/ –

+0

Ich bin mit dem gleichen Problem konfrontiert. Es funktioniert nicht mit Kotlin-Klasse –

+1

Ich habe dieses Problem erstellt https://issuetracker.google.com/issues/62778467 Ursache konnte ich es nicht lösen. –

Antwort

0

Versuchen Sie, den Raum auf 1.0.0-alpha8 zu aktualisieren und fügen Sie die Liste < @JvmSuppressWildcards Pet> hinzu.

Verwandte Themen