我有一个这样的Observable
mydata
name value
<chr> <dbl>
1 jd 20
2 mk 30
3 js 40
readable_strings <- c("John Smith" = "js", "Jane Do" = "jd", "Mike Tyson" = "mt")
ggplot(mydata, aes(x = name, y=value)) + geom_bar(stat="identity")
我有此代码
Observable<String> gitHubRepoModelObservable;
repoNames只是一个字符串列表。当我手动添加字符串“ hello”时,onNext会被调用,但是当我从类似于波纹管的API调用中添加字符串时
repoNames = new ArrayList<String>();
gitHubRepoModelObservable = Observable.fromIterable(repoNames);
repoNames.add("Hello");
gitHubRepoModelObservable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
System.out.println(s);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
我正在将API中的字符串添加到未调用“ onNext”的repoNames中。
我见过
call.enqueue(new Callback<List<GitHubRepoModel>>() {
@Override
public void onResponse(Call<List<GitHubRepoModel>> call, Response<List<GitHubRepoModel>> response) {
for (GitHubRepoModel repo : response.body()) {
repoNames.add(repo.getName());
}
}
@Override
public void onFailure(Call<List<GitHubRepoModel>> call, Throwable t) {
}
});
可以在初始化改造时添加,但是我想更好地了解rxjava,因此在本实验中它不起作用。
请帮助!
答案 0 :(得分:1)
如果仅将元素添加到普通列表,为什么会onNext
被调用?
在第一个示例中,您看到onNext
被调用,因为修改后的列表在subscribe
期间通过流传递。
创建Subject
例如。 PublishSubject
并将列表传递到Subject.onNext
中的onResponse
,进行订阅,您将得到想要的东西。
第二个选项是添加RxJava2CallAdapterFactory
并返回Observable<Response<List<GithubRepoModel>>>
。这样,您就无需自己创建流。
答案 1 :(得分:1)
这是行不通的。 创建api请求并尝试订阅时,列表为emty,因此Observable不起作用。 您需要创建Observable,这样您的订阅者才能运行您的请求!
Observable<String> gitHubRepoModelObservable = Observable.create(
new Observable.OnSubscribe<String>() {
@Override
public void call(final Subscriber<? super String> sub) {
call.enqueue(new Callback<List<GitHubRepoModel>>() {
@Override
public void onResponse(Call<List<GitHubRepoModel>> call, Response<List<GitHubRepoModel>> response) {
for (GitHubRepoModel repo : response.body()) {
sub.onNext(repo.getName()); //send result to rx
}
sub.onCompleted();
}
@Override
public void onFailure(Call<List<GitHubRepoModel>> call, Throwable t) {
}
});
}
}
);
gitHubRepoModelObservable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<String>() {
@Override
public void onNext(String s) {
System.out.println(s);
}
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
});