在 android 中从领域数据库过滤数据时更新列表
Update the list when data is filtered from the realm database in android
当我从领域数据库中过滤项目列表时,我遇到了列表更新问题。
我真正想做的是在 table 中添加一些用户记录,当用户单击过滤器按钮时,我查询领域数据库以过滤结果。我能够将结果打印在日志中,但不会反映在列表中,因为由于数据库没有更改而未调用更改侦听器。谁能指导一下如何在列表中反映查询得到的结果?
型号class如下图
public class UserModel extends RealmObject {
@PrimaryKey
private int id;
@Required
private String firstName;
@Required
private String lastName;
private UserAddressModel userAddress;
private int age;
public UserAddressModel getUserAddress() {
return userAddress;
}
public void setUserAddress(UserAddressModel userAddress) {
this.userAddress = userAddress;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
在数据库中添加记录的查询如下。
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(@NonNull Realm realm) {
int nextID;
if (mUserModel == null) {
// increment index
Number num = realm.where(UserModel.class).max("id");
if (num == null) {
nextID = 1;
} else {
nextID = num.intValue() + 1;
}
} else {
nextID = mUserModel.getId();
}
UserModel obj = new UserModel();
obj.setId(nextID);
obj.setFirstName(etFirstName.getText().toString().trim());
obj.setLastName(etLastName.getText().toString().trim());
obj.setAge(Integer.parseInt(etAge.getText().toString().trim()));
UserAddressModel userAddressModel = new UserAddressModel();
userAddressModel.setAddress(etAddress.getText().toString().trim());
userAddressModel.setId(nextID);
obj.setUserAddress(userAddressModel);
realm.copyToRealmOrUpdate(obj);
realm.beginTransaction();
realm.addChangeListener(mOnDataChangeListener);
}
});
过滤记录的查询如下。
RealmResults<UserModel> realmList = realm.where(UserModel.class).greaterThanOrEqualTo("age", 20).findAll();
以上查询给出了我在日志中打印的所需结果。但是不要更新列表。
我也曾尝试将调用监听器添加到上述查询并将数据集更改通知列表,但没有帮助。
如有任何帮助,我们将不胜感激。 TIA.
好的,经过各种尝试,终于找到了关于问题的解决方案。您需要做的就是调用 RealmRecyclerViewAdapter 的 updateData() 方法,您将扩展到您的普通 recyclerview。
下面的代码片段提供了解决方案。
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(@NonNull Realm realm) {
userModels = realm.where(UserModel.class).greaterThanOrEqualTo("age", 20).findAll();
}
});
dataListAdapter.updateData(userModels);
在上面的代码中要记住的要点是你必须在事务块之外通知数据。如果不在块外完成,应用程序将崩溃,说明当事务为 运行.
时您无法通知数据
希望对某处的人有所帮助。
编码愉快!!!
当我从领域数据库中过滤项目列表时,我遇到了列表更新问题。
我真正想做的是在 table 中添加一些用户记录,当用户单击过滤器按钮时,我查询领域数据库以过滤结果。我能够将结果打印在日志中,但不会反映在列表中,因为由于数据库没有更改而未调用更改侦听器。谁能指导一下如何在列表中反映查询得到的结果?
型号class如下图
public class UserModel extends RealmObject {
@PrimaryKey
private int id;
@Required
private String firstName;
@Required
private String lastName;
private UserAddressModel userAddress;
private int age;
public UserAddressModel getUserAddress() {
return userAddress;
}
public void setUserAddress(UserAddressModel userAddress) {
this.userAddress = userAddress;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
在数据库中添加记录的查询如下。
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(@NonNull Realm realm) {
int nextID;
if (mUserModel == null) {
// increment index
Number num = realm.where(UserModel.class).max("id");
if (num == null) {
nextID = 1;
} else {
nextID = num.intValue() + 1;
}
} else {
nextID = mUserModel.getId();
}
UserModel obj = new UserModel();
obj.setId(nextID);
obj.setFirstName(etFirstName.getText().toString().trim());
obj.setLastName(etLastName.getText().toString().trim());
obj.setAge(Integer.parseInt(etAge.getText().toString().trim()));
UserAddressModel userAddressModel = new UserAddressModel();
userAddressModel.setAddress(etAddress.getText().toString().trim());
userAddressModel.setId(nextID);
obj.setUserAddress(userAddressModel);
realm.copyToRealmOrUpdate(obj);
realm.beginTransaction();
realm.addChangeListener(mOnDataChangeListener);
}
});
过滤记录的查询如下。
RealmResults<UserModel> realmList = realm.where(UserModel.class).greaterThanOrEqualTo("age", 20).findAll();
以上查询给出了我在日志中打印的所需结果。但是不要更新列表。
我也曾尝试将调用监听器添加到上述查询并将数据集更改通知列表,但没有帮助。
如有任何帮助,我们将不胜感激。 TIA.
好的,经过各种尝试,终于找到了关于问题的解决方案。您需要做的就是调用 RealmRecyclerViewAdapter 的 updateData() 方法,您将扩展到您的普通 recyclerview。
下面的代码片段提供了解决方案。
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(@NonNull Realm realm) {
userModels = realm.where(UserModel.class).greaterThanOrEqualTo("age", 20).findAll();
}
});
dataListAdapter.updateData(userModels);
在上面的代码中要记住的要点是你必须在事务块之外通知数据。如果不在块外完成,应用程序将崩溃,说明当事务为 运行.
时您无法通知数据希望对某处的人有所帮助。
编码愉快!!!