Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何转换RealmResults<;对象>;列出<;对象>;_Android_Realm - Fatal编程技术网

Android 如何转换RealmResults<;对象>;列出<;对象>;

Android 如何转换RealmResults<;对象>;列出<;对象>;,android,realm,Android,Realm,我从Realmlike收到RealmResults RealmResults<StepEntry> stepEntryResults = realm.where(StepEntry.class).findAll(); RealmResults stepEntryResults=realm.where(StepEntry.class).findAll(); 现在我想将RealmResults转换为ArrayList 我试过了 ArrayList<StepEntry>

我从
Realm
like收到RealmResults

RealmResults<StepEntry> stepEntryResults = realm.where(StepEntry.class).findAll();
RealmResults stepEntryResults=realm.where(StepEntry.class).findAll();
现在我想将
RealmResults
转换为
ArrayList

我试过了

 ArrayList<StepEntry> stepEntryArray = new ArrayList<StepEntry>(stepEntryResults));
ArrayList stepEntryArray=新建ArrayList(stepEntryResults));
但是my
ArrayList
中的项不是my
StepEntry
对象,它是
StepEntryRealmProxy

我如何转换它?
如果您有任何帮助或建议,我们将不胜感激。

要急切地阅读领域中的每一个元素(从而使列表中的所有元素变得不受管理,您可以这样做):

List arrayListOfUnmanagedObjects=realm.copyFromRealm(realmResults);

但是您通常完全没有理由这样做,除非您想用GSON序列化对象(特别是因为它使用反射而不是getter读取字段数据),因为Realm的设计方式是列表公开更改侦听器,只需观察对数据库所做的更改,即可使UI保持最新。

由@EpicPandaForce给出的答案效果良好。我尝试了这种方法来优化我的应用程序性能,我发现下面的方法要快一点。喜欢速度的人的另一个选择:

RealmResults<Tag> childList = realm.where(Tag.class).equalTo("parentID", id).findAll();
Tag[] childs = new Tag[childList.size()];
childList.toArray(childs);
return Arrays.asList(childs);
RealmResults childList=realm.where(Tag.class).equalTo(“parentID”,id).findAll();
Tag[]childs=新标记[childList.size()];
childList.toArray(childs);
返回数组.asList(childs);
在Kotlin中:

var list : List<Student>: listof()
val rl = realm.where(Student::class.java).findAll()

// subList return all data contain on RealmResults
list = rl.subList(0,rl.size)
var-list:list:listof()
val rl=realm.where(Student::class.java).findAll()
//子列表返回RealmResults上包含的所有数据
列表=rl.子列表(0,rl.大小)

Hey@EpicPandaForce你能解释一下为什么这样不好吗?我不希望我的视图了解领域,因为如果需要的话,我想交换底层的数据存储技术。基本上,我的视图/演示者根本不应该知道领域。因此,我只想返回一个列表,而不是一个RealmResults@clu答案取决于您是在侦听数据库,还是认为只从数据库请求一次数据就足够了,因为没有其他线程会修改数据库中的对象(请参阅)。但是
realm.copyFromRealm()
创建可变对象,如果您想将RealmObjects替换为域模型并付出渴望评估的代价,映射到不可变值objs通常是一个更好的选择。@EpicPandaForce是的,我明白您的观点,但我希望视图不知道这个细节。我宁愿让存储库/数据存储向注册视图发送更新。通过这种方式,我可以决定使用Room而不是Realm是否更有意义。任何我还在试验的东西。对于Realm,您应该以这样一种方式编写代码,即RealmResults应该可以轻松地用LiveData替换。不是
List
,而是
LiveData
@clu如果您需要以一种不需要它作为实现细节的方式来分隔领域,那么您应该使用PagedResults和映射数据源,使用(我编写它是为了方便)当然更快,最初的问题希望提供的对象不是
\uu RealmProxy
,这需要从领域读取它们并将它们复制到非托管对象。
var list : List<Student>: listof()
val rl = realm.where(Student::class.java).findAll()

// subList return all data contain on RealmResults
list = rl.subList(0,rl.size)