Android Realm 數(shù)據(jù)庫的集成和使用 以及缺點(diǎn)

安裝

第一步:在項(xiàng)目的 build.gradle 文件中添加如下 class path 依賴顾患。

buildscript{repositories{jcenter()}dependencies{classpath"io.realm:realm-gradle-plugin:3.1.2"}

項(xiàng)目的build.gradle文件在如下位置:

第二步:在 app 的 build.gradle 文件中應(yīng)用realm-android插件。

applyplugin:'realm-android'

app的build.gradle文件在如下位置:


使用

Realm數(shù)據(jù)庫的基本增刪查改设预,跟傳統(tǒng)的數(shù)據(jù)庫一樣犁河,他主要的優(yōu)勢是對json數(shù)據(jù)結(jié)構(gòu)的保存

注意事項(xiàng)

1、Realm保存的結(jié)果其實(shí)是在一個(gè)文件里面宾符,默認(rèn)的文件名是"default.realm"灭翔,在"Context.getFilesDir()"目錄中魏烫,即:/data/data//files/default.realm肝箱。意思是,當(dāng)你在應(yīng)用管理里面給當(dāng)前app"清除數(shù)據(jù)"呐赡,realm數(shù)據(jù)庫的數(shù)據(jù)會丟失骏融。故我們需要把默認(rèn)的數(shù)據(jù)文件放到asset目錄中,當(dāng)數(shù)據(jù)庫初始化時(shí)再copy到"Context.getFilesDir()"下档玻。

2、在創(chuàng)建RealmConfiguration對象時(shí)窃肠,可以通過.assetFile(this,"realm file path in assets")方法指定初始化的數(shù)據(jù)庫文件刷允。Realm會把制定路徑下的xxx.realm文件copy到Context.getFilesDir()目錄中,以替換默認(rèn)創(chuàng)建的空數(shù)據(jù)庫文件纤怒。

3天通、可以設(shè)置默認(rèn)文件名,通過RealmConfiguration類進(jìn)行配置。路徑似乎改不了烘豹,需要看具體設(shè)備供應(yīng)商的實(shí)現(xiàn)瓜贾。

4携悯、Realm的實(shí)例需要在每次的具體操作中獲取,可以看成是一個(gè)數(shù)據(jù)操作的sessin龟劲,用完后必須close關(guān)閉轴或。

打開和關(guān)閉Realm實(shí)例昌跌,應(yīng)當(dāng)放在onCreate/onDestroy或者onStart/onStop方法中照雁。

5、Realm中似乎有RxJava的影子审胸,支持鏈?zhǔn)疆惒饺蝿?wù)卸勺?

6、Realm中有個(gè)各種增刪改差的方法曙求,還可以根據(jù)JSON的數(shù)據(jù)實(shí)例化一個(gè)RealmObject子類java bean。

7悟狱、重點(diǎn):切記,Realm數(shù)據(jù)庫的主鍵字段不是自動(dòng)增長的苹享,需要自己設(shè)置浴麻,做添加的時(shí)候如果不給id字段值,默認(rèn)會為0软免。后面再添加會報(bào)錯(cuò),說id為0的數(shù)據(jù)已經(jīng)存在膏萧。尤其是批量添加的時(shí)候要注意蝌衔,當(dāng)心出現(xiàn)只添加了一條記錄的悲劇蝌蹂。

8、數(shù)據(jù)自動(dòng)更新亩冬。mRealm.addChangeListener(this);//當(dāng)數(shù)據(jù)庫的數(shù)據(jù)有變化時(shí)硼身,系統(tǒng)回調(diào)此方法。


缺點(diǎn)

這里有的也不能說是缺點(diǎn), 只是使用起來覺得不方便的地方.

限制了創(chuàng)建對象和操作對象必須在同一個(gè)線程.

違反了這條會報(bào)錯(cuò):java.lang.IllegalStateException: Realm access from incorrect thread. Realm objects can only be accessed on the thread they were created.比如我們在UI線程查詢出來的對象, 想要異步地刪除或者更新, 我們必須在新的線程重新查詢.

沒有主鍵自增的功能, 見Issue #469, 需要自己控制主鍵自增.

從List中刪除了一項(xiàng)之后, 最后的一項(xiàng)會移動(dòng)過來補(bǔ)到被刪除的那一項(xiàng)原來的位置. 這是因?yàn)槿思揖褪沁@么設(shè)計(jì)的stackoverflow. 默認(rèn)情況下是沒有排序的, 數(shù)據(jù)按照添加的順序返回, 但是這并不是一種保證, 所以當(dāng)刪除了中間的元素, 后面的會補(bǔ)上這個(gè)位置, 以保證底層的數(shù)據(jù)是放在一起的. 解決辦法就是指定一個(gè)排序規(guī)則.

查詢出來的對象不可以臨時(shí)改變其數(shù)據(jù), 否則會報(bào)錯(cuò):java.lang.IllegalStateException: Changing Realm data can only be done from inside a transaction.

不支持反向link的查詢. (見前面鏈?zhǔn)讲樵儾糠值慕榻B).

不支持級聯(lián)刪除. 即從數(shù)據(jù)庫中刪除一個(gè)對象的時(shí)候, 不會刪除其中RealmObject子類或RealmList類型的字段在數(shù)據(jù)庫中對應(yīng)的數(shù)據(jù).Issue #1104,Issue #2717. 這點(diǎn)也可以理解, 因?yàn)閙odel之間的關(guān)系可能是多對多的. 所以需要實(shí)現(xiàn)級聯(lián)刪除的地方需要手動(dòng)處理.

測試不方便:RealmResults對象即不能被mock也不能被new; 所有的Model對象也不能被mock. 因?yàn)镸ockito can only mock non-private & non-final classes.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末营袜,一起剝皮案震驚了整個(gè)濱河市丑罪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌跪另,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件煤搜,死亡現(xiàn)場離奇詭異,居然都是意外死亡嘲驾,警方通過查閱死者的電腦和手機(jī)迹卢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腐碱,“玉大人,你說我怎么就攤上這事喂走。” “怎么了缴啡?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵瓷们,是天一觀的道長。 經(jīng)常有香客問我碘裕,道長攒钳,這世上最難降的妖魔是什么帮孔? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任不撑,我火速辦了婚禮,結(jié)果婚禮上姆坚,老公的妹妹穿的比我還像新娘实愚。我一直安慰自己,他們只是感情好腊敲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著懂昂,像睡著了一般乎赴。 火紅的嫁衣襯著肌膚如雪忍法。 梳的紋絲不亂的頭發(fā)上榕吼,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機(jī)與錄音原探,去河邊找鬼顽素。 笑死,一個(gè)胖子當(dāng)著我的面吹牛胁出,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播全蝶,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绷落!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起砌烁,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤函喉,失蹤者是張志新(化名)和其女友劉穎避归,沒想到半個(gè)月后管呵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡顿天,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年蔑担,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啤握。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖排抬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蹲蒲,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布缘薛,位于F島的核電站卡睦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏表锻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一显歧、第九天 我趴在偏房一處隱蔽的房頂上張望补胚。 院中可真熱鬧追迟,春花似錦骚腥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽带猴。三九已至懈万,卻和暖如春拴清,著一層夾襖步出監(jiān)牢的瞬間会通,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工沪停, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裳涛,地道東北人木张。 一個(gè)月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓舷礼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親且轨。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

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