我搜索并找到了FindFirst returns null问题,但没有人回答。当我认为我做错了什么时,让我用更多的细节来解释我的问题。
我正在开发一款应用,它要求用户先登录,然后让用户使用该应用。
我的 User
类如下所示:
public class User extends RealmObject {
@PrimaryKey
@SerializedName("uid")
String id;
@SerializedName("ufname")
String firstName;
@SerializedName("ulname")
String lastName;
String avatar;
int sessions;
int invites;
String nextSessionTime;
String nextSessionTitle;
@SerializedName("lastlogin")
String lastLogin;
String token;
@Override
public String toString() {
return new GsonBuilder().create().toJson(this, User.class);
}
// other setters and getters
}
在 SigninActivity
类中成功登录后,我将用户对象存储在 Realm 数据库中:
@Override
public void onSignInResponse(final GeneralResponse response) {
if (response == null) {
Timber.e("response is null");
return;
}
Timber.d(response.toString());
if (response.isSuccess()) {
// Store user's info including Token
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.copyToRealmOrUpdate(response.getUser());
}
});
// Goto main screen
MainVideoActivity.startActivity(this);
this.finish();
} else {
String errorMessage = response.getErrorMessages();
super.displayMessage(errorMessage);
}
}
登录成功后,应用会将用户定向到 MainVideoActivity
。我想通过以下代码在 Realm 中找到用户,但是我得到的是 null
。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_video);
// Create the Realm instance
realm = Realm.getDefaultInstance();
User user = realm.where(User.class).findFirst();
// RealmResults<User> user = realm.where(User.class).findAll();
Timber.d(user.toString());
}
user
在这两种方法中都是 null
。
但是,我可以在数据库中看到我的 none null
用户。
我正在使用 classpath "io.realm:realm-gradle-plugin:2.0.2"
最佳答案
这里有两件事:
调试窗口中的
null
值。这是将 Realm 与调试器一起使用时的已知限制。由于 Realm 生成了一个代理类来访问值,因此在调试器中检查 RealmObject 的字段不会通过代理类。查看更多详情 here具有
null
值的字段不会在toString()
方法中打印。如果RealmObject
中没有定义 toString() 方法,Realm 注释处理器将生成一个toString()
方法。我认为这里的问题是User.toString()
忽略了空值。尝试删除User
类中的 toString() 方法。
关于java - Realm findFirst() 方法返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40065366/