境界未完全保存

时间:2017-10-22 14:28:47

标签: android realm

领域是否有类似侦听器的提交数据? 我的代码是

...  
RealmDatabase.submitNewUser(mainActivity.getMyRealm(), userModel);
mainActivity.closeKeyboard();
mainActivity.onBackPressed();
...


public static void submitNewUser(Realm myRealm, UserModel user) {
    myRealm.beginTransaction();
    UserDb userDb = myRealm.createObject(UserDb.class);
    userDb.setUserid(getNextUserId(myRealm));
    userDb.setName(user.name);
    ....
    myRealm.commitTransaction();
}

private static int getNextUserId(Realm myRealm) {
    try {
        return myRealm.where(UserDb.class).max("userid").intValue() + 1;
    } catch (ArrayIndexOutOfBoundsException e) {
        return 1;
    }
}

保存数据后,我关闭片段并返回上一个片段。 在启动功能上,检查是否有数据

@Override
public void onStart() {
    super.onStart();
    if (loading.isShowing()) loading.dismiss();
    if (reloadList && checkContent()) {
        ....
    }
    reloadList = true;
}

private boolean checkContent() {
    users = RealmDatabase.loadUserList(mainActivity.getMyRealm());
    if (users.size() > 0 && users.get(0).userid > 0) {
        // note:
        // user id is auto increament while saved
        // if no data, return dataset with userid = 0 for other purpose
        return true;
    } else {
        ....
        return false;
    }
}

public static List<UserModel> loadUserList(Realm myRealm) {
    List<UserModel> list = new ArrayList<>();

    RealmResults<UserDb> results = myRealm.where(UserDb.class).findAll();
    results = results.sort("userid", Sort.DESCENDING);

    for (UserDb result : results) {
        UserModel userModel = new UserModel();
        userModel.userid = result.getUserid();
        ....
        userModel.note = result.getNote();
        list.add(userModel);
    }
    if (list.size() == 0) {
        UserModel userModel = new UserModel();
        userModel.userid = 0;
        userModel.note = "You still have no user at this time";
        list.add(userModel);
    }
    return list;
}

checkContent(),user.size检测为1(添加了新数据)但userid仍为0。 我错过了这个逻辑吗?因为如果我在添加新用户后重新打开应用程序,一切运行良好。

更新
在使用监听器后,我得到了我的数据集,但仍未显示我的内容。经过一些试验后,我发现我的列表视图即使在我重新输入数据后也没有显示数据,并且在适配器上进行了notifydataset。

users = RealmDatabase.loadUserList(mainActivity.getMyRealm());
homeAdapter.reloadList(users);

....

public void reloadList(List<UserModel> users) {
    this.users = users;
    notifyDataSetChanged();
}

更新2
除了第一个项目之外,第二个,第三个和第二个项目的一切进展顺利

2 个答案:

答案 0 :(得分:0)

  

领域是否有像提交数据的监听器一样?

realmResults.addChangeListener(realmChangeListener);

必须保持对RealmResults的字段引用。

  

如果我在添加新用户后重新打开应用程序,一切运行良好。

您可能不会更新从RealmResults构建的ArrayList。

答案 1 :(得分:0)

根据@epicPandaForce的回答,我使用了我的代码的监听器 并解决了我在@epicPandaForce答案中的最后一条评论中提到的问题,我改变了我的代码

getMyRealm().addChangeListener(new RealmChangeListener<Realm>() {
     @Override
     public void onChange(Realm element) {
           // previous code in my activity
           // getFragmentManager().popBackStackImmediate();

           // new code in my activity
           fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
           FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
           fragmentTransaction.replace(R.id.container, fragment);
     }
 });  

这些代码实际上并不在侦听器中,而是在我的活动上调用函数。这些位置仅适用于其所称的位置。