0

我正在尝试通过 Feed 的主键访问项目列表,就像这样。主键是一个 url。尝试像这样访问它会使我返回 null,而尝试加上:arg0引号会产生 compile time error error: Unused parameter: arg0。是否可以为此查询使用 url?

@Query("SELECT * FROM item WHERE feed_url = :arg0")
fun observeAllByFeed(feedUrl: String): LiveData<List<Item>>

物品

@Entity(foreignKeys = arrayOf(ForeignKey(
        entity = Feed::class,
        parentColumns = arrayOf("url"),
        childColumns = arrayOf("feed_url"))))
data class Item(
        @ColumnInfo(name = "guid") @PrimaryKey var guid: String = "",
        @ColumnInfo(name = "categoryIds") var categoryIds: List<Int> = emptyList(),
        @ColumnInfo(name = "comments") var comments: String? = null,
        @ColumnInfo(name = "content") var content: String? = null,
        @ColumnInfo(name = "description") var description: String = "",
        @ColumnInfo(name = "author") var author: String = "",
        @ColumnInfo(name = "block") var block: Boolean = false,
        @ColumnInfo(name = "duration") var duration: Int = 0,
        @ColumnInfo(name = "explicit") var explicit: String = "",
        @ColumnInfo(name = "image_url") var imageUrl: String = "",
        @ColumnInfo(name = "keywords") var keywords: List<String> = emptyList(),
        @ColumnInfo(name = "subtitle") var subTitle: String = "",
        @ColumnInfo(name = "summary") var summary: String = "",
        @ColumnInfo(name = "link") var link: String = "",
        @ColumnInfo(name = "publication_date") var pubDate: Date = Date(),
        @ColumnInfo(name = "title") var title: String = "",
        @ColumnInfo(name = "feed_url") var feedURL: String = "",
        @ColumnInfo(name = "download_state") var downloadState: Int = Item.DownloadState.STATE_NOT_DOWNLOADED
) : Serializable {
    companion object DownloadState {
        val STATE_NOT_DOWNLOADED = 0
        val STATE_DOWNLOADING = 1
        val STATE_DOWNLOADED = 2
    }
}

喂养

@Entity(foreignKeys = arrayOf(ForeignKey(
        entity = Owner::class,
        parentColumns = arrayOf("id"),
        childColumns = arrayOf("owner_id")
)))
data class Feed(
        @ColumnInfo(name = "url") @PrimaryKey var URL: String = "",
        @ColumnInfo(name = "copyright") var copyright: String? = null,
        @ColumnInfo(name = "description") var description: String? = null,
        @ColumnInfo(name = "itemGUIDs") var itemGUIDs: List<String> = emptyList(),
        @ColumnInfo(name = "author") var author: String? = null,
        @ColumnInfo(name = "block") var block: Boolean = false,
        @ColumnInfo(name = "categoryIds") var categoryIds: List<Int> = emptyList(),
        @ColumnInfo(name = "explicit") var explicit: Boolean = false,
        @ColumnInfo(name = "image_url") var imageUrl: String? = null,
        @ColumnInfo(name = "owner_id") var ownerId: Int = -1,
        @ColumnInfo(name = "subtitle") var subtitle: String? = null,
        @ColumnInfo(name = "summary") var summary: String? = null,
        @ColumnInfo(name = "language") var language: String = "",
        @ColumnInfo(name = "link") var link: String = "",
        @ColumnInfo(name = "title") var title: String = "",
        @ColumnInfo(name = "expiry") var expiry: Date = Date(),
        @ColumnInfo(name = "subscribed") var subscribed: Boolean = false
) : Serializable

所有者

@Entity
data class Owner(
        @ColumnInfo(name = "name") var name: String? = null,
        @ColumnInfo(name = "email") var email: String? = null
) : Serializable {
    @ColumnInfo(name = "id")
    @PrimaryKey(autoGenerate = true)
    var id: Int = 0
}
4

1 回答 1

0

事实证明,当LiveData与房间一起使用时,它会立即返回,因此调用LiveData.value会立即给出,同时它会异步获取实际数据以提供给观察者,因此如果尝试从非调用null转换,则不能用作替代品。LiveData这记录在这里:https://developer.android.com/reference/android/arch/lifecycle/LiveData.html#getValue()

返回当前值。请注意,在后台线程上调用此方法并不能保证将接收到最新的值集。

于 2017-06-26T01:23:48.720 回答