使用LiveData,Room和一对多关系列出狗的主人的名字

时间:2018-08-11 17:31:37

标签: android android-room android-livedata android-mvvm

我想将狗列出到RecylerView中。每只狗与主人都有“一对多”的关系。因此实体将是:

所有者实体

@Entity
@TypeConverters(GithubTypeConverters::class)
class Owner(
    @PrimaryKey(autoGenerate = false)
    @field:SerializedName("id")
    @field:Expose
    var id: Int,
    @field:SerializedName(value = "name")
    var name: String)

狗实体

@Entity
@TypeConverters(GithubTypeConverters::class)
class Dog(
    @PrimaryKey(autoGenerate = false)
    @field:SerializedName("id")
    @field:Expose
    var id: Int,
    @field:SerializedName(value = "ownerId")
    var ownerId: Int,
    @field:SerializedName(value = "name")
    var name: String)

对于每个实体,我都有一个DAO

所有者DAO

@Dao
abstract class OwnerDao {

    @Query("SELECT * FROM Owner")
    abstract fun findAll(): LiveData<List<Owner>>

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    abstract fun inserOwners(ownersList: List<Owner>)
}

狗DAO

@Dao
abstract class DogDao {

    @Query("SELECT * FROM Dog")
    abstract fun findAll(): LiveData<List<Dog>>

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    abstract fun insertDogs(dogssList: List<Dog>)
}

我需要什么? 创建狗列表,并在每行中显示狗的名称和所有者的名称。

我已经有了Adapter和LiveData(我不在这里发布那些代码,因为问题与此无关)

  • 如果我使用DogDAO创建LiveData,则可以显示狗的名称,但不能显示所有者的名称。
  • 如果我使用OwnerDAO创建LiveData,则可以显示所有者的名字,但不能显示狗的名字。

我一直在阅读,但是没有太多信息。

我遵循了本教程:Relation (Room),该解决方案是为用户提供宠物列表(我需要相反的意思),我认为解释不好。

我想我必须创建一个自定义的Dao。但是我尝试的解决方案没有用。

能请你帮我吗?

谢谢!

0 个答案:

没有答案