【发布时间】:2018-01-02 14:34:07
【问题描述】:
我正在尝试查询我的 Realm DB,以便输出将提供一个非托管对象,为此,我将我的 RealmList 对象类型更改为 List。
现在事情在 addchangeListener 中,我将输出对象 (stories) 值设为managed。但是stories 的类型是List。那么为什么我的stories 对象变成了managed,它应该充当unmanaged 对象。
List<story> stories = realm.where(story.class).findAllAsync();
stories.addChangeListener(new RealmChangeListener<RealmResults<story>>() {
@Override
public void onChange(RealmResults<story> storydata) {
if (storydata.size() != 0) {
madapter = new StoriesAdapter(stories, getBaseContext(), MR);
mrecyclerview.setNestedScrollingEnabled(false);
mrecyclerview.setLayoutManager(new LinearLayoutManager(getBaseContext()));
mrecyclerview.setAdapter(madapter);
}
}
});
StoriesAdapter
class StoriesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
List<story> storyList;
StoriesAdapter(List<story> storyList) {
this.storyList = storyList;
}
}
我说我的List 是managed,因为当我尝试编写下面的代码时,我得到Cannot modify managed objects outside of a write transaction.
madapter.storyList.get(3).setTitle("Wonderland"); // where storyList is List which i am pointing to `stories`.
【问题讨论】:
-
在测试期间监听器是否 100% 工作?
-
是的,但你为什么要问??
-
谁说它是托管的,它仍然没有托管。
-
它是被管理的,因为现在当我尝试在我的
madapter中更改List时,我得到Cannot modify managed objects outside of a write transaction.这意味着我在我的适配器方法中初始化的列表是managed。 -
@Remario 详细说明你的意思? RealmResults 中的元素是懒惰获取的,所以它不应该导致任何“内存问题蔓延到你身上”?什么内存问题?