如何从rxJava中提取并将其放在领域离线数据库上



我需要下载一个包含30k个机场的长列表,并将其放在离线数据库上。

我做了这个代码从web下载json:

 bFetch.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v)
        {
            Retrofit retrofit = new Retrofit.Builder()
                    .addConverterFactory(GsonConverterFactory.create())
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                    .baseUrl(GithubService.SERVICE_ENDPOINT).build();
            GithubService service = retrofit.create(GithubService.class);
            service.getAirport()
                    .subscribeOn(Schedulers.newThread())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Subscriber<List<Airport>>() {
                        @Override
                        public void onCompleted()
                        {
                         bClear.setText("OK");
                        }
                        @Override
                        public void onError(Throwable e) {
                        }
                        @Override
                        public void onNext(List<Airport> airports)
                        {
                         Log.d("msh",String.valueOf(airports.size()));
                        }
                    });
        }
    });

,它工作得很好,但如果我只想提取一个对象,比如map或flatMap,它会给我这个:

service.getAirport()
                    .map(new Func1<List<Airport>, Airport>() 
                    {
                        @Override
                        public Airport call(List<Airport> airports) {
                            return null;
                        }
                    })
                    .subscribeOn(Schedulers.newThread())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Subscriber<List<Airport>>() {
                        @Override
                        public void onCompleted()
                        {
                         bClear.setText("OK");
                        }
                        @Override
                        public void onError(Throwable e) {
                        }
                        @Override
                        public void onNext(List<Airport> airports)
                        {
                         Log.d("msh",String.valueOf(airports.size()));
                        }
                    });
        }
    });

错误:

无法解析方法"订阅(匿名)"rx.Subscriber>)

:

  1. 我该怎么做才能解决它?我的问题是,我不太了解rX,我也有一点困惑
  2. 我可以把数据在领域数据库中的地图()方法(如果它的工作)?

谢谢

由于您正在从List<Airport>映射到Airport,因此您需要有Subscriber<Airport>而不是Subscriber<List<Airport>>,同时对onNext方法进行相同的更改。

看起来可以用Java8和RxJava2-RC5编译。我将订阅者参数从List更改为X,并将onNext方法从List更改为X。也许您可以提供有关您的环境的更多信息。请注意,在RxJava2中不再可能返回null。

进一步注意,使用newThread-Scheduler并不是一个好主意。

这个调度程序只是在每次被请求时启动一个新线程通过下标beOn()或observeOn()newThread()几乎从来都不是一个好方法选择,不仅仅是因为启动时涉及的延迟线程,还因为这个线程没有被重用。——Tomasz Nurkiewicz摘自《Reactive Programming with RxJava》

Example-Impl with RxJava2-RC5

Observable.just(Arrays.asList("1", "2", "3"))
                .map(new Function<List<String>, String>() {
                    @Override
                    public String apply(List<String> s) throws Exception {
                        return null;
                    }
                }).subscribeOn(Schedulers.newThread())
                .subscribe(new Observer<String>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                    }
                    @Override
                    public void onNext(String value) {
                    }
                    @Override
                    public void onError(Throwable e) {
                    }
                    @Override
                    public void onComplete() {
                    }
                });

相关内容

  • 没有找到相关文章

最新更新