2016-11-05 87 views
5

我試圖做的事:沒有滿足預期結果:Realm.io - 如何使用通配符%LIKE%的查詢

mRealm 
     .where(Contact.class) 
     .equalTo(Contact.NAME, text, Case.INSENSITIVE) 
     .findAllSortedAsync(Contact.NAME, Sort.ASCENDING); 

結果。

mRealm 
     .where(Contact.class) 
     .contains(Contact.NAME, text, Case.INSENSITIVE) 
     .findAllSortedAsync(Contact.NAME, Sort.ASCENDING); 

結果:預期結果不符合。

預期結果:

mRealm 
     .where(Contact.class) 
     .like(Contact.NAME, text, Case.INSENSITIVE) 
     .findAllSortedAsync(Contact.NAME, Sort.ASCENDING); 

回答

2

新的答案:

境界2.3.0+:

public RealmQuery<E> like(String fieldName, 
         String value, 
         Case casing) 

條件字段的值與指定子相匹配,以通配符:

  • '*'匹配[0, n] unicode字符

  • '?'單個Unicode字符匹配。

參數:

  • fieldName - 現場比較。

  • value - 通配符字符串。

  • casing - 如何處理套管。將其設置爲Case.INSENSITIVE僅適用於Latin-1字符。

返回:查詢對象。

拋出:IllegalArgumentException - 如果一個或多個參數不匹配類或字段類型。


OLD答:

mRealm 
    .where(Contact.class) 
    .contains(Contact.NAME, text, Case.INSENSITIVE) 
    .findAllSortedAsync(Contact.NAME, Sort.ASCENDING); 

這應該工作,但您將收到一個回調的附加RealmChangeListener完成實際的異步查詢時。

A RealmRecyclerViewAdapter自動從https://github.com/realm/realm-android-adapters這樣做。

+0

雖然可以根據https://realm.io/docs/java/latest/#sorting-and-querying-on-string – EpicPandaForce

+0

呀,碰上與時髦人物的問題「載有()」在我的應用程序上工作正常,但實際上我需要搜索表格中常見的「Contact.NAME」字段。例如ABBC,ABBA,牛熊證 - >%BB% –

+0

...'包含(ContactFields.NAME,「BB」);'? – EpicPandaForce

3
mRealm 
    .where(Contact.class) 
    .like(Contact.NAME, text, Case.INSENSITIVE) 
    .findAllSortedAsync(Contact.NAME, Sort.ASCENDING); 
+0

我正在使用classpath ** io.realm:realm-gradle-plugin:2.1.1 **,您正在使用哪個版本? –

+0

https://github.com/realm/realm-java/issues/3752 LIKE尚未添加 – EpicPandaForce

+1

已添加到v2.3.0中 – mjosh

相關問題