【问题标题】:Update the list when data is filtered from the realm database in android从android中的领域数据库过滤数据时更新列表
【发布时间】:2018-07-03 08:53:16
【问题描述】:

当我从领域数据库中过滤项目列表时,我遇到了列表更新问题。

我真正想做的是在表中添加一些用户记录,当用户单击过滤器按钮时,我查询领域数据库以过滤结果。我能够将结果打印在日志中,但不会反映在列表中,因为由于数据库没有更改,因此未调用更改侦听器。谁能指导如何在列表中反映通过查询获得的结果?

模型类如下图。

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。

【问题讨论】:

  • 发布一些代码 sn-p 以便其他人可以帮助您。你知道你的问题,但我们不知道。

标签: android android-studio-3.0 realm-mobile-platform realm-list


【解决方案1】:

好的,在尝试了各种事情之后,终于找到了关于问题的解决方案。您需要做的就是调用 RealmRecyclerViewAdapter 的 updateData() 方法,您将把它扩展到您的正常回收视图。

下面的代码 sn -p 提供解决方案。

realm.executeTransaction(new Realm.Transaction() {
                @Override
                public void execute(@NonNull Realm realm) {
                    userModels = realm.where(UserModel.class).greaterThanOrEqualTo("age", 20).findAll();
                }
            });
            dataListAdapter.updateData(userModels);

在上面的代码中要记住的要点是你必须通知事务块之外的数据。如果未在块外完成,应用程序将崩溃,说明您无法在事务运行时通知数据。

希望它对某个地方的人有所帮助。

编码愉快!!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多