我正在创建一个代表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,价值保持不变,这使得这个问题更加怪异。
答案 0 :(得分:0)
我设法通过在SyncConfiguration中使用waitForInitialRemoteData()解决了这个问题。这可以确保在清除应用数据后域不为空。