领域查询的奇怪行为

马库斯

我正在制作一个用户代表的应用程序,RealmObject当用户登录时我有一些代码来检查用户是否已经存在或者是否需要根据 id 创建该用户。

 public class User extends RealmObject {
     @PrimaryKey
     public String id;

     public User(String id) {
         this.id = id;
     }

检查用户是否存在的代码:

public void checkUser(final HashMap<String, String> data) {
    config = new SyncConfiguration.Builder(syncUser, Constants.realmUri)
                    .schemaVersion(0)
                    .build();
    Realm.getInstanceAsync(config, new Realm.Callback() {
        @Override
        public void onSuccess(@NonNull Realm realm) {
            AuthActivity.this.realm = realm;

            // Check if user already exist
            RealmQuery<User> query = realm.where(User.class);
            query.equalTo("id", data.get("id"));

            // Execute the query
            User u = query.findFirst();
            if (u == null) {
                createUser(data);
                Log.i("RealmHelper", "User did not exist");
            } else {
                if (u.isValid()) {
                    AuthActivity.this.userId = u.id;
                    startActivityMain();
                    Log.i("RealmHelper", "User did exist");
                }
            }
        }
    });
}

Constants.realmUri 等于带有我的服务器的 ip 和端口的字符串。

现在,如果用户存在,上面的代码显然应该记录用户确实存在。问题是我得到了正确的行为,但是如果我创建用户,进入应用程序,关闭应用程序,然后删除应用程序数据,该checkUser()方法将返回该用户在下次尝试登录时不存在。我怀疑这与本地和远程领域有关,并且该checkUser()方法中使用的领域在某种程度上是本地的而不是远程的。

尽管checkUser()说该用户不存在,但该用户在 Realm Studio 中可见并保存在同步数据库中,因为它没有被更改。

id 在 User 来自 Facebook 并且值保持不变,这使得这个问题更加奇怪。

马库斯

我通过在 SyncConfiguration 中使用 waitForInitialRemoteData() 设法解决了这个问题。这可确保清除应用程序数据后领域不为空。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章