Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.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
Java 方法不完全、不完全或不正确的方法';我没打电话_Java_Android_Rx Java2 - Fatal编程技术网

Java 方法不完全、不完全或不正确的方法';我没打电话

Java 方法不完全、不完全或不正确的方法';我没打电话,java,android,rx-java2,Java,Android,Rx Java2,我有以下情况:我需要从数据库获取数据。当我尝试进入UI线程时(我是这样做的): 我一直有装载指示器。我不明白为什么会发生这种情况,因为我为所有情况(错误和成功情况)添加了showLoadingIndicator(false)。那么,为什么它不移动而数据不显示呢?movieDao.getFavorites()是一个无限流。在无限流上使用.toList()没有意义,因为.toList()在源流完成之前不会发出 有两种选择: 使你的资源有限 使movieDao.getFavorites()返回一个Si

我有以下情况:我需要从数据库获取数据。当我尝试进入UI线程时(我是这样做的):


我一直有装载指示器。我不明白为什么会发生这种情况,因为我为所有情况(错误和成功情况)添加了
showLoadingIndicator(false)
。那么,为什么它不移动而数据不显示呢?

movieDao.getFavorites()
是一个无限流。在无限流上使用
.toList()
没有意义,因为
.toList()
在源流完成之前不会发出

有两种选择:

  • 使你的资源有限
  • 使
    movieDao.getFavorites()
    返回一个
    Single
    而不是
    可观察的

    或者简单地把
    放在源代码后面

    mCompositeDisposable.add(movieDao.getFavorites()
                    .take(1) // This will terminate the stream after it emits first item.
                    .subscribeOn(Schedulers.io())
                    ...
    
  • 或者,不要使用
    .toList()
  • 保持您的无限流,并继续侦听数据库更改

    mCompositeDisposable.add(movieDao.getFavorites()
                    .map(movieEntities -> movieEntities.stream().map(this::getMovie).collect(Collectors.toList()))
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(list -> {
                        if (list.isEmpty()) {
                            mView.showEmptyState(true);
                        } else {
                            mView.onMoviesLoaded(list);
                        }
                    })
            );
    
    mCompositeDisposable.add(movieDao.getFavorites()
                    .take(1) // This will terminate the stream after it emits first item.
                    .subscribeOn(Schedulers.io())
                    ...
    
    mCompositeDisposable.add(movieDao.getFavorites()
                    .map(movieEntities -> movieEntities.stream().map(this::getMovie).collect(Collectors.toList()))
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(list -> {
                        if (list.isEmpty()) {
                            mView.showEmptyState(true);
                        } else {
                            mView.onMoviesLoaded(list);
                        }
                    })
            );