领域查询的奇怪behviour

时间:2018-02-14 00:24:33

标签: java android realm realm-mobile-platform

我正在创建一个代表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来自Facebook,价值保持不变,这使得这个问题更加怪异。

1 个答案:

答案 0 :(得分:0)

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