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

cha*_*ake 6 android wildcard realm sql-like

我正在尝试:

mRealm
         .where(Contact.class)
         .equalTo(Contact.NAME, text, Case.INSENSITIVE)
         .findAllSortedAsync(Contact.NAME, Sort.ASCENDING);
Run Code Online (Sandbox Code Playgroud)

结果:未达到预期结果.

mRealm
         .where(Contact.class)
         .contains(Contact.NAME, text, Case.INSENSITIVE)
         .findAllSortedAsync(Contact.NAME, Sort.ASCENDING);
Run Code Online (Sandbox Code Playgroud)

结果:未达到预期结果.

预期结果:

mRealm
         .where(Contact.class)
         .like(Contact.NAME, text, Case.INSENSITIVE)
         .findAllSortedAsync(Contact.NAME, Sort.ASCENDING);
Run Code Online (Sandbox Code Playgroud)

Epi*_*rce 6

新答案:

领域2.3.0+:

public RealmQuery<E> like(String fieldName,
                      String value,
                      Case casing) 
Run Code Online (Sandbox Code Playgroud)

使用通配符调整字段值与指定子字符串匹配的条件:

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

  • '?' 匹配单个unicode char.

参数:

  • fieldName - 要比较的字段.

  • value - 通配符字符串.

  • casing - 如何处理套管.将其设置为Case.INSENSITIVE仅适用于Latin-1字符.

返回:查询对象.

抛出:IllegalArgumentException - 如果一个或多个参数与类或字段类型不匹配.


老答案:

mRealm
     .where(Contact.class)
     .contains(Contact.NAME, text, Case.INSENSITIVE)
     .findAllSortedAsync(Contact.NAME, Sort.ASCENDING);
Run Code Online (Sandbox Code Playgroud)

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

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