2017-06-13 12 views
10

Bazując na moim poprzednim pytaniu (Android Persistence room: "Cannot figure out how to read this field from a cursor"), które dostałem do pracy dzięki opinii, zaimplementowałem ten sam przykład w Kolinie (zobacz poniższy kod). Musiałem wprowadzić drobne zmiany, takie jak parametry, które są teraz przekazywane do zapytania, które muszą być przekazane jako "p0", "p1" itd. Teraz w Kotlin pojawia się następujący błąd związany z klasą UserWithPets:Pokojowe działanie @Relation działa w Javie, ale nie w Kolinie

error: Nie można określić, jak odczytać to pole z kursora. e: prywatne java.util.List zwierzęta domowe;

@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 
} 

Wydaje się, że jeśli piszę klasę UserWithPets w Javie to będzie działać poprawnie, ale nie powiedzie się, gdy jest on napisany w Kotlin. Jakieś pomysły, co jest nie tak? Czy to jest problem z przetwarzaniem adnotacji?

+0

Spróbuj "List <@ JvmSuppressWildcards Pet>". Dokumenty: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-jvm-suppress-wildcards/ –

+0

Mam do czynienia z tym samym problemem. To nie działa z klasą Kotlin –

+1

Utworzyłem ten problem https://issuetracker.google.com/issues/62778467, ponieważ nie mogłem go rozwiązać. –

Odpowiedz

0

Spróbuj zaktualizować pokój do 1.0.0-alpha8 i dodać listę < @JvmSuppressWildcards Pet>.

Powiązane problemy