android - 如何在同一个 Realm 查询中查询两个字段?

标签 android realm realm-mobile-platform

我需要根据名字和姓氏从 Realm Db 中查找客户。目前,我有这样的查询:

RealmResults<CustomerModel> results = realm
            .where(CustomerModel.class)
            .or()
            .contains("firstname", input, Case.INSENSITIVE)
            .or()
            .contains("lastname", input, Case.INSENSITIVE)
            .or()
            .contains("addresses.street", input, Case.INSENSITIVE)
            .or()
            .contains("addresses.city", input, Case.INSENSITIVE)
            .or()
            .contains("addresses.postcode", input, Case.INSENSITIVE)
            .findAllSorted("customerLocalId", Sort.DESCENDING);

这不能正常工作,因为我的名字和姓氏之间有 OR。

因此,如果我想查找名为 John Doe 的用户,它不会找到,但如果我只键入 John,它会找到。

我该如何解决这个问题?

最佳答案

为什么不跨空白分割?

String filter = input.trim().replaceAll("\\s+", " ");
String[] tokens = filter.split(" ");
RealmQuery<CustomerModel> query = realm.where(CustomerModel.class);

for(int i = 0, size = tokens.length; i < size; i++) {
    String token = tokens[i];
    if(i != 0) {
        query.or();
    }
    query.contains("firstname", token, Case.INSENSITIVE)
        .or()
        .contains("lastname", token, Case.INSENSITIVE)
        .or()
        .contains("addresses.street", token, Case.INSENSITIVE)
        .or()
        .contains("addresses.city", token, Case.INSENSITIVE)
        .or()
        .contains("addresses.postcode", token, Case.INSENSITIVE)        
}

RealmResults<CustomerModel> results = query
        .findAllSorted("customerLocalId", Sort.DESCENDING);

关于android - 如何在同一个 Realm 查询中查询两个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54092681/

相关文章:

android - 当应用程序处于后台时,如何显示 firebase 通知的自定义 UI?

java - 我需要在我的 View 中调用 MediaPlayer

ios - Realm 移动平台——内存中

在登录到 Ubuntu GUI session 之前,Android 设备不会出现在 "adb devices"中

android - 将多个图像添加到 ViewFlipper 中的 ImageViews 时出现“OutOfMemoryError”?

javascript - 有没有办法通过 React-Native (JS) 预打包 Realm 数据库 (default.Realm)

ios - 删除 Realm 默认路径

android - 在列表中组织 Android Realm 数据

ios - 如何创建自定义 Realm 文件

realm - 如何从 Realm 对象服务器中完全删除一些特定的数据库