gpt4 book ai didi

java - 使用 rxjava2+retrofit 的多处理或多线程不起作用

转载 作者:行者123 更新时间:2023-12-02 11:39:35 24 4
gpt4 key购买 nike

这是我的代码:-[我得到的输出显示在下图中。][1]主文件代码

但我想要输出,例如在一个屏幕上显示两个用户的 github 存储库,左侧显示 vikashumain(用户名)存储库,右侧显示 naman14(用户名)存储库。但我只得到一个用户存储库显示在两个屏幕上侧面像维卡舒曼用户仅在两侧显示

BASE_URL= https://api.github.com/

/**
* A simple {@link Fragment} subclass.
*/
public class BlankFragment extends Fragment {


public BlankFragment() {
// Required empty public constructor
}

@BindView(R.id.re1)
RecyclerView recyclerView;
@BindView(R.id.re2)
RecyclerView recyclerView2;

View v;
List<MainCategoryData> list,list2;
private RepoAdapter adapter;
Retrofit retrofit;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
v= inflater.inflate(R.layout.fragment_blank, container, false);
ButterKnife.bind(this,v);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);
recyclerView2.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager2 = new LinearLayoutManager(getContext());
recyclerView2.setLayoutManager(layoutManager2);
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
retrofit.create(ApiServiceMain.class).maincategorya()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::handleRespons, 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 );

return v;
}




private void handleRespons(List<MainCategoryData> storeCoupons) {
list = new ArrayList<>(storeCoupons);
adapter = new RepoAdapter(list);
recyclerView.setAdapter(adapter);
list2 = new ArrayList<>(storeCoupons);//error
adapter = new RepoAdapter(list2);
recyclerView2.setAdapter(adapter);


}
public void handleError(Throwable error) {
Toast.makeText(getContext(), "Error "+error.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
}
}

这是我的服务文件:-ApiService.java

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();



}

模型(POJO)类:-

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;
}
}

/image/sga9A.jpg

我正在解析的json文件:- https://api.github.com/users/vikashumain/starred我正在解析的第二个 json 文件:- https://api.github.com/users/naman14/starred

最佳答案

目前尚不清楚您想在这里实现什么目标。您将两个用户的数据合并到一个列表中,并在两个 View 上设置相同的列表。

由于handleRespons,这会将两个面板更新为同一列表:

retrofit.create(ApiServiceMain.class).maincategorya()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::handleRespons, this::handleError);

此后的某个时间,以下调用将生成 2 个列表,每个用户一个列表,并且 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);

关于java - 使用 rxjava2+retrofit 的多处理或多线程不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48679885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com