2017-09-25 38 views
0

我不知道爲什麼我看到奇怪的行爲,當我試圖更新Realm中沒有更新布爾字段的行時設置爲false。 我在這裏沒有更新我的布爾字段,即notiadult: -在copyToRealmOrUpdate領域上布爾字段設置爲false

案例1:

Realm.init(context); 
    Realm realm = Realm.getDefaultInstance(); 
    UserDetails m2= new UserDetails(); 
    m2.setUserid(1); 
    m2.setSort(paths_Vvalue[position]); 
    realm.beginTransaction(); 
    realm.copyToRealmOrUpdate(m2); 
    realm.commitTransaction(); 

這段代碼執行後,他們(notiadult)甚至他們之前保存爲分別爲true

這是一個錯誤? 一切工作正常,如果我添加和更新這些字段,如: -

案例2:

Realm.init(context); 
    Realm realm = Realm.getDefaultInstance(); 
    UserDetails res = realm.where(UserDetails.class).equalTo("userid", 1).findFirst(); 
    UserDetails m2= new UserDetails(); 
    m2.setUserid(1); 
    m2.setSort(paths_Vvalue[position]); 
    m2.setAdult(res.getAdult()); //setting boolean 
    m2.setNoti(res.getNoti()); //setting boolean 
    realm.beginTransaction(); 
    realm.copyToRealmOrUpdate(m2); 
    realm.commitTransaction(); 

一切正常,在這種情況下,但仍,
我做得不對的case 1或者這是一個bug的還是一個領域的功能?
任何提示將非常感謝!

+0

什麼是UserDetails類? –

+0

領域對象類@ M.Prokhorov – phpdroid

+0

所以,它是一個非託管的Realm對象,並且它們沒有任何構造函數。這意味着您的原始布爾值將以其默認值「false」初始化。並且在請求更新後,值將隨着該實例中包含的內容而更新。它正如預期的那樣工作。 –

回答

0

考慮要覆蓋(「更新」)的UserDetails與相同的主鍵,用下面的值

UserDetails m2= new UserDetails(); 
m2.setUserid(1); 
m2.setSort(paths_Vvalue[position]); 
//m2 adult is default `false` 
//m2 noti is default `false` 
... 
realm.insertOrUpdate(m2); 

您正在與(非託管)項目,其中這些字段值是更新現有對象的對象false,所以當然會是false

+0

默認情況下,它們是真的不是假的! – phpdroid

+0

他們爲什麼會是真的?除非你有一個默認構造函數將它們設置爲true,否則它們是錯誤的。 – EpicPandaForce

+0

我是這樣做的第一次運行 – phpdroid

相關問題