Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.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 在后台线程中使用blockingget安全吗_Android_Rx Java - Fatal编程技术网

Android 在后台线程中使用blockingget安全吗

Android 在后台线程中使用blockingget安全吗,android,rx-java,Android,Rx Java,我基本上是在后台线程中尝试将列表映射到rxjava中的字符串。为此,我使用blocking get。这样做安全吗?或者有更好的方法吗?我是否在这里使用blocking get释放异步 private Observable<Movie> getGenreObservable(Movie movie){ return HttpCall.getRequest().getMovieGenres("").subscribeOn(Schedulers.io())

我基本上是在后台线程中尝试将列表映射到rxjava中的字符串。为此,我使用blocking get。这样做安全吗?或者有更好的方法吗?我是否在这里使用blocking get释放异步

 private Observable<Movie> getGenreObservable(Movie movie){
    return HttpCall.getRequest().getMovieGenres("").subscribeOn(Schedulers.io())
            .map(new Function<MovieGenreList, List<Genre>>() {
                @Override
                public List<Genre> apply(MovieGenreList movieGenreList) throws Throwable {
                    return movieGenreList.getGenres();
                }
            }).flatMap(new Function<List<Genre>, ObservableSource<List<Genre>>>() {
                @Override
                public ObservableSource<List<Genre>> apply(List<Genre> genres) throws Throwable {
                    return Observable.fromIterable(genres).filter(new Predicate<Genre>() {
                        @Override
                        public boolean test(Genre genre) throws Throwable {
                            for(Integer id:movie.getGenreIds()){
                                if(id == genre.getId()) return true;
                            }
                            return false;
                        }
                    }).toList().toObservable();
                }
            }).map(new Function<List<Genre>, List<String>>() {
                @Override
                public List<String> apply(List<Genre> genres) throws Throwable {
                    return Observable.fromIterable(genres).map(new Function<Genre, String>() {
                        public String apply(Genre genre) {
                            return genre.getName();
                        }
                    }).toList().blockingGet();
                }
            }).map(new Function<List<String>, String>() {
                @Override
                public String apply(List<String> strings) throws Throwable {
                    return Observable.fromIterable(strings).reduce(new BiFunction<String, String, String>() {
                        @Override
                        public String apply(String s, String s2) throws Throwable {
                            return s+", "+s2;
                        }
                    }).blockingGet();
                }
            }).map(new Function<String, Movie>() {
                @Override
                public Movie apply(String s) throws Throwable {
                    movie.setGenreNames(s);
                    return movie;
                }
            });
}
你能不能用.flatMap代替.map,这样就不需要blockingGet了

私有可观察GetGenreObservable电影{ 返回HttpCall.getRequest.getMovieGenres.subscribeOnSchedulers.io .Map新功能{ @凌驾 公开列表applyMovieGenreList电影Genrelist可丢弃{ return movieGenreList.getGenres; } }.flatmap新功能{ @凌驾 公共可观察资源applyList类型可丢弃{ 返回Observable.fromIterablegenres.filternew谓词{ @凌驾 公共布尔测试类型可丢弃{ forInteger id:movie.getGenreIds{ ifid==genre.getId返回true; } 返回false; } }.toList.toObservable; } }.flatmap新功能{ @凌驾 公共列表applyList类型可丢弃{ 返回Observable.fromIterablegenres.mapnew函数{ 公共字符串applyGenre体裁{ 返回genre.getName; } }托利斯特先生; } }.flatmap新功能{ @凌驾 公共字符串applyList字符串抛出可丢弃{ 返回可观测的.fromIterablestrings.reducenew双函数{ @凌驾 公共字符串applyString s,字符串s2抛出可丢弃{ 返回s+,+s2; } } } }.Map新功能{ @凌驾 公共电影applyString s可丢弃{ movie.setgenrename; 回归电影; } }; }
是的,这将解决问题,但我只是想知道我们应该在生产代码中使用blockingget还是not@TARAMISHRA这实际上取决于您的用例。一般来说,我会说你应该避免它,除非你有一个很好的理由使用它,并且知道它不会阻塞一个不应该被阻塞的线程。