Android Room2.0之@TypeConverters使用

前言

Room是Google 新推出的Jetpack組件庫(kù)中一款操作數(shù)據(jù)庫(kù)的SQLITE ORM庫(kù)械念。其風(fēng)格類似Retrofit,使用注解+接口聲明形式运悲,簡(jiǎn)化了數(shù)據(jù)庫(kù)的操作龄减。

隨著時(shí)間的推遲,Room迭代更新的版本也越來越快班眯,到目前(本文所寫時(shí)間為止)最新的版本是2.1.0-alpha02希停,它的一些API也做了調(diào)整,本文是記錄一次@TypeConverters(ThumbConverter::class)的使用

本文是以Kotlin語言實(shí)例署隘,Java語法類似

定義實(shí)體類 News.kt
@Entity
data class News(
        @PrimaryKey
        var row: String,
        var title: String = "",
        var type: Int = 2,
        val thumb: List<String>?,
        var content_time: String? = "",
        var source: String? = "",
        var hot: Int = 0
)

發(fā)現(xiàn)Android Studio會(huì)報(bào)如下錯(cuò)誤脖苏,編譯不通過,原因是@Entity定義的thumb字段無法識(shí)別List<String>?類型(非基礎(chǔ)類型)定踱,最終映射成數(shù)據(jù)庫(kù)字段棍潘,所以Room提供一個(gè)解決方案:手動(dòng)做類型轉(zhuǎn)換,用轉(zhuǎn)換類告訴Room該如何轉(zhuǎn)換成數(shù)據(jù)庫(kù)支持的類型。

/Users/Documents/code/news_android2.0/module_news/build/tmp/kapt3/stubs/debug/com/zm/module/news/repository/entity/News.java:15: 錯(cuò)誤: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
    private final java.util.List<java.lang.String> thumb = null;
                                                   ^

定義TypeConverter類
class ThumbConverter {
    @TypeConverter
    fun getThumbFromString(value: String):List<String>? {
        return value.split(",")
    }

    @TypeConverter
    fun storeThumbToString(list: List<String>): String {
        val str = StringBuilder(list[0])
        list.forEach {
            str.append(",").append(it)
        }
        return str.toString()
    }
}

@TypeConverter的兩個(gè)方法是成對(duì)出現(xiàn)的亦歉,方法名稱可以任意命名恤浪,重點(diǎn)在入?yún)⒑统鰠㈩愋停仨毷切枰D(zhuǎn)換的類型和最終轉(zhuǎn)換后的類型肴楷,這點(diǎn)想一下原理能明白了水由。上面示例寫入時(shí)將List<String>類型轉(zhuǎn)換成以“,”逗號(hào)拼接的String類型赛蔫,讀取時(shí)再將逗號(hào)分割的字符串轉(zhuǎn)換成List<String>類型砂客。

Room 2.0@TypeConverters調(diào)整

經(jīng)過上面的定義依然是無法編譯通過的,原因是Entity類還需要添加這里@TypeConverters呵恢,強(qiáng)調(diào)一下@TypeConverters 是有s的鞠值,要與轉(zhuǎn)換類方法上的@TypeConverter做區(qū)別。在現(xiàn)有的很多文章里提到@TypeConverters都是加到屬性上的渗钉,如:stackoverflow上的問答彤恶,在Room 2.0是會(huì)報(bào)錯(cuò)的,因?yàn)楝F(xiàn)在已經(jīng)改為加到Entity類上面了鳄橘。

錯(cuò)誤的

@TypeConverters(ThumbConverter::class)
        val thumb: List<String>?,

正確的

@Entity
@TypeConverters(ThumbConverter::class)
data class News(
        @PrimaryKey
        var row: String,
        var title: String = "",
        var type: Int = 2,
        val thumb: List<String>?,
        var content_time: String? = "",
        var source: String? = "",
        var hot: Int = 0
)

后記

多個(gè)轉(zhuǎn)換類可以@TypeConverters(ThumbConverter::class声离,XXXX::Converter::class)定義。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瘫怜,一起剝皮案震驚了整個(gè)濱河市术徊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鲸湃,老刑警劉巖赠涮,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異唤锉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)别瞭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門窿祥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蝙寨,你說我怎么就攤上這事晒衩。” “怎么了墙歪?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵听系,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我虹菲,道長(zhǎng)靠胜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮浪漠,結(jié)果婚禮上陕习,老公的妹妹穿的比我還像新娘。我一直安慰自己址愿,他們只是感情好该镣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著响谓,像睡著了一般损合。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上娘纷,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天嫁审,我揣著相機(jī)與錄音,去河邊找鬼失驶。 笑死土居,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嬉探。 我是一名探鬼主播擦耀,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼涩堤!你這毒婦竟也來了眷蜓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤胎围,失蹤者是張志新(化名)和其女友劉穎吁系,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體白魂,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汽纤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了福荸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕴坪。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖敬锐,靈堂內(nèi)的尸體忽然破棺而出背传,到底是詐尸還是另有隱情,我是刑警寧澤台夺,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布径玖,位于F島的核電站,受9級(jí)特大地震影響颤介,放射性物質(zhì)發(fā)生泄漏梳星。R本人自食惡果不足惜赞赖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丰泊。 院中可真熱鬧薯定,春花似錦、人聲如沸瞳购。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽学赛。三九已至年堆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盏浇,已是汗流浹背变丧。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绢掰,地道東北人痒蓬。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像滴劲,于是被迫代替她去往敵國(guó)和親攻晒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理班挖,服務(wù)發(fā)現(xiàn)鲁捏,斷路器,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • 持久庫(kù)Room Room在SQLite上提供了一個(gè)抽象層萧芙,以便在利用SQLite的全部功能的同時(shí)使流暢的數(shù)據(jù)庫(kù)訪問...
    _番茄沙司閱讀 8,408評(píng)論 4 23
  • 從去年11月底到現(xiàn)在给梅,我在簡(jiǎn)書上寫了5萬多個(gè)字,包括沒有發(fā)表的双揪,包括書評(píng)等應(yīng)該也差不多有8萬個(gè)字动羽。 回顧這段日期,...
    夜梭靜省閱讀 402評(píng)論 0 1
  • 這不是一個(gè)愛情故事,我不是她的男朋友擎场,她也已經(jīng)為人妻羽德、為人母几莽,我們沒有見過面迅办,我們是網(wǎng)友。 在微信還沒推出章蚣,QQ盛...
    瑊玏閱讀 202評(píng)論 0 1
  • 三凉当、前塵如煙 這黑袍婦人柑司,是原長(zhǎng)春堂左副堂主杜明煙,那白衣女子喊衫,便是明惠帝朱允炆的女兒。 建文元年,惠帝朱允炆因削...
    燈下一壺酒閱讀 297評(píng)論 0 3