gpt4 book ai didi

java - Realm findFirst() 方法返回 null

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:02 24 4
gpt4 key购买 nike

我搜索并找到了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

enter image description here

但是,我可以在数据库中看到我的 none null 用户。

enter image description here

我正在使用 classpath "io.realm:realm-gradle-plugin:2.0.2"

最佳答案

这里有两件事:

  1. 调试窗口中的 null 值。这是将 Realm 与调试器一起使用时的已知限制。由于 Realm 生成了一个代理类来访问值,因此在调试器中检查 RealmObject 的字段不会通过代理类。查看更多详情 here

  2. 具有null 值的字段不会在toString() 方法中打印。如果 RealmObject 中没有定义 toString() 方法,Realm 注释处理器将生成一个 toString() 方法。我认为这里的问题是 User.toString() 忽略了空值。尝试删除 User 类中的 toString() 方法。

关于java - Realm findFirst() 方法返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40065366/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com