Realm.io - 如何使用通配符%LIKE%进行查询

时间:2016-11-05 15:09:39

标签: android realm wildcard sql-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);

3 个答案:

答案 0 :(得分:6)

新答案:

Realm 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 - 如果一个或多个参数与类或字段类型不匹配。

老答案:

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

这应该可以,但是当完成实际的异步查询时,您将收到对附加的RealmChangeListener的回调。

RealmRecyclerViewAdapter会自https://github.com/realm/realm-android-adapters自动执行此操作。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

这段代码对我有用。

Realm realm=Realm.getDefaultinstance();
RealmResults<Item> reaaa = realm.where(Item.class).like("name",query,Case.INSENSITIVE).findAll();