我需要下载一个包含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>)
:
- 我该怎么做才能解决它?我的问题是,我不太了解rX,我也有一点困惑
- 我可以把数据在领域数据库中的地图()方法(如果它的工作)?
谢谢
由于您正在从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() {
}
});