使用rxjava2+改型的多处理或多线程不起作用
这是我的代码:-[我得到的输出显示在下图中。][1] 主文件代码 但我希望输出像在一个屏幕上显示两个用户的github repos,左边显示vikashumainusername repos,右边显示naman14username repos。但我只在两边显示一个用户repos,像vikashumain 用户仅在两侧显示 基本URL= 这是我的服务文件:-ApiService.java使用rxjava2+改型的多处理或多线程不起作用,java,android,retrofit2,rx-java2,Java,Android,Retrofit2,Rx Java2,这是我的代码:-[我得到的输出显示在下图中。][1] 主文件代码 但我希望输出像在一个屏幕上显示两个用户的github repos,左边显示vikashumainusername repos,右边显示naman14username repos。但我只在两边显示一个用户repos,像vikashumain 用户仅在两侧显示 基本URL= 这是我的服务文件:-ApiService.java public interface ApiServiceMain { //we used post here b
public interface ApiServiceMain
{
//we used post here becz here we have parameters .Get and Post works in the same way but post has parameters and get doesn't have.
@GET("users/vikashumain/starred")
Observable<List<MainCategoryData>> maincategoryapi();
@GET("users/naman14/starred")
Observable<List<MainCategoryData>> maincategoryap();
@GET("users/vikashumain/starred")
Observable<List<MainCategoryData>> maincategorya();
}
ModelPOJO类:-
public class MainCategoryData {
public int id;
public String name;
private String html_url;
public String description;
public String language;
public int stargazers_count;
public MainCategoryData() {
}
public int getId() {
return id;
}
List<Vikashumain> data2;
public String getName() {
return name;
}
public List<Vikashumain> getData2() {
return data2;
}
public void setData2(List<Vikashumain> data2) {
this.data2 = data2;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setHtmlUrl(String html_url) {
this.html_url = html_url;
}
public void setDescription(String description) {
this.description = description;
}
public void setLanguage(String language) {
this.language = language;
}
public void setStargazersCount(int stargazers_count) {
this.stargazers_count = stargazers_count;
}
public String getHtmlUrl() {
return html_url;
}
public String getDescription() {
return description;
}
public String getLanguage() {
return language;
}
public int getStargazersCount() {
return stargazers_count;
}
public MainCategoryData(int id, String name, String html_url, String description, String language, int stargazers_count) {
this.id = id;
this.name = name;
this.html_url = html_url;
this.description = description;
this.language = language;
this.stargazers_count = stargazers_count;
}
}
我正在解析的json文件:-
我正在解析的第二个json文件:-不清楚您在这里试图实现什么。将两个用户的数据合并到一个列表中,并在两个视图上设置相同的列表 这会将两个面板更新为同一列表,因为handleRespons: 在此之后的某个时候,下面的调用将生成两个列表,每个用户一个,handleRespons将被调用两次。较慢用户的数据将再次覆盖两个面板的数据
Observable.just(retrofit.create(ApiServiceMain.class))
.subscribeOn(Schedulers.computation())
.flatMap(s -> {
Observable<List<MainCategoryData>> couponsObservable
= s.maincategorya().subscribeOn(Schedulers.io());
Observable<List<MainCategoryData>> storeInfoObservable
= s.maincategoryap().subscribeOn(Schedulers.io());
return Observable.merge(couponsObservable,storeInfoObservable);
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::handleRespons, this::handleError);
您可能应该为每个面板实现两个单独的响应处理程序:
private void handleResponseLeft(List<MainCategoryData> storeCoupons) {
List<MainCategoryData> list = new ArrayList<>(storeCoupons);
RepoAdapter adapter = new RepoAdapter(list);
recyclerView.setAdapter(adapter);
}
private void handleResponseRight(List<MainCategoryData> storeCoupons) {
List<MainCategoryData> list2 = new ArrayList<>(storeCoupons);
RepoAdapter adapter2 = new RepoAdapter(list2);
recyclerView2.setAdapter(adapter2);
}
ApiServiceMain s = retrofit.create(ApiServiceMain.class);
s.maincategorya()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::handleResponseLeft, this::handleError);
s.maincategoryap()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::handleResponseRight, this::handleError);
Observable.just(retrofit.create(ApiServiceMain.class))
.subscribeOn(Schedulers.computation())
.flatMap(s -> {
Observable<List<MainCategoryData>> couponsObservable
= s.maincategorya().subscribeOn(Schedulers.io());
Observable<List<MainCategoryData>> storeInfoObservable
= s.maincategoryap().subscribeOn(Schedulers.io());
return Observable.merge(couponsObservable,storeInfoObservable);
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::handleRespons, this::handleError);
private void handleResponseLeft(List<MainCategoryData> storeCoupons) {
List<MainCategoryData> list = new ArrayList<>(storeCoupons);
RepoAdapter adapter = new RepoAdapter(list);
recyclerView.setAdapter(adapter);
}
private void handleResponseRight(List<MainCategoryData> storeCoupons) {
List<MainCategoryData> list2 = new ArrayList<>(storeCoupons);
RepoAdapter adapter2 = new RepoAdapter(list2);
recyclerView2.setAdapter(adapter2);
}
ApiServiceMain s = retrofit.create(ApiServiceMain.class);
s.maincategorya()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::handleResponseLeft, this::handleError);
s.maincategoryap()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::handleResponseRight, this::handleError);