【问题标题】:Realm Android queries return wrong resultRealm Android 查询返回错误结果
【发布时间】:2016-10-28 10:37:33
【问题描述】:

我有一个结构如下的表:

public class GroupDailyDB extends RealmObject{
    @PrimaryKey
    private int groupId;
    private String groupName;
    private String groupDescription;
    private int groupStatus;
    private boolean hasImage;
    private int sweatPoints;
    private long steps;
    private int rank;
    private float percentile;
    private int noOfUsers;
    private boolean isCurrentUserPartOfGroup;
    private boolean isCurrentUserOwner;
} 

我的数据已成功保存 刷新时我的 json 不发送组 ID 3,我需要更改其状态。

检查代码如下:

for(int i = 0 ; i < groupModel.getData().size() ; i++){
    GroupDailyDB groupDailyDB = 
           realm.where(GroupDailyDB.class)
           .notEqualTo("groupId",groupModel.getData().get(i).getGroupId())
           .findFirst();
    Log.i(TAG,"Group id delete daily:  "+groupDailyDB.getGroupId());
}

但我的日志分别打印 id 4,5 它永远不会返回我 id 3

【问题讨论】:

  • 这是什么线程?
  • @EpicPandaForce realmAsyncTask
  • 在循环之前打印这个并查看返回的值? groupModel.getData().size()
  • 所以值返回 2,我从 json 打印 id 它的 4,5 是正确的
  • 由于您不对结果进行排序,findFirst() 将返回它找到的第一个元素,不保证会返回具有最小id 的元素。您可能想改用findAllSorted(xxx).first()

标签: android database realm realm-mobile-platform


【解决方案1】:

所以,考虑一下...您有一个包含 3 个对象的列表,每个对象都有一个唯一的 ID 值。您遍历其他一些 ID 值列表,查询其 ID 不等于循环当前 ID 的 3 个对象。

该查询将返回 2 个元素用于匹配 ID(您将其过滤掉)和 3 个元素用于不匹配 ID。您只获得了这些查询的第一个元素,而您对丢失的数据感到困惑?

在唯一 ID 值的情况下,您应该使用equalTo 来查找匹配的一个元素。当没有 ID 值相等时(当 findFirst 返回没有对象时),也可能想要添加一些异常检查

【讨论】:

    【解决方案2】:

    你的代码不应该是这样的

    RealmQuery<GroupDailyDb> query = realm.where(GroupDailyDB.class);
    for(int i = 0 ; i < groupModel.getData().size() ; i++){
        query = query.notEqualTo("groupId",groupModel.getData().get(i).getGroupId());
    }
    GroupDailyDB groupDailyDB = query.findFirst();
    Log.i(TAG,"Group id delete daily:  "+groupDailyDB.getGroupId());
    

    ?

    【讨论】:

    • 即使尝试这样做但不起作用给我所有的 id
    猜你喜欢
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多