我是RxJava的新手。我想從JSON API中獲取數據。假設有兩個API API 1和API 2.我們從API 1中獲取一個JSON對象「mediaId」。現在,我想用「mediaId」從API 2獲取JSON。我如何使用RxJava實現這一點,並在Android中進行改進?如何使用帶有改型的RxJava從多個API獲取數據2
public void gettdata(final Listerner listerner){
postitemses= new ArrayList<>();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://www.mytrendin.com")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
APiService networkAPI = retrofit.create(APiService.class);
Observable<List<Postitems>> observable = networkAPI.getFriendObservable()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
observable.subscribe(new Observer<List<Postitems>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
listerner.onFailure("oops... Something went wrong");
}
@Override
public void onNext(List<Postitems> postitemsList1) {
Postitems postitems;
for (int i=0;i<postitemsList1.size();i++){
postitems = new Postitems();
int id = postitemsList1.get(i).getId();
String title = postitemsList1.get(i).getTitle().getRendered();
String shortdesc= postitemsList1.get(i).getExcerpt().getRendered();
String mediaid= postitemsList1.get(i).getFeatured_media();
String authorid= postitemsList1.get(i).getAuthor();
String date = postitemsList1.get(i).getDate();
String slug = postitemsList1.get(i).getSlug();
Log.i("Hello-slug",""+slug);
String[] mediaurl= mydata(mediaid);
Log.i("Hello-mediaurl",""+mediaurl);
postitems.setId(id);
postitems.setDate(date);
postitems.setSlug(""+slug);
postitems.setPostExcerpt(shortdesc);
postitems.setPostTitle(title);
postitemses.add(postitems);
}
listerner.showpostitems(postitemses);
}
});
}
public String[] mydata(String mediaid){
final String[] mediaurl = new String[1];
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("https://www.mytrendin.com")
.build();
APiService aPiService = retrofit.create(APiService.class);
Call<Postitems> call = aPiService.getmediaurl(mediaid);
call.enqueue(new Callback<Postitems>() {
@Override
public void onResponse(Call<Postitems> call, Response<Postitems> response) {
Postitems postitemsList1 = response.body();
mediaurl[0] =postitemsList1.getGuid().getRendered();
// mediaurl[0][0] =postitemsList1.get(0).getGuid().getRendered();
}
@Override
public void onFailure(Call<Postitems> call, Throwable t) {
}
});
return mediaurl;
}
出錯
https://www.mytrendin.com 3月5日至9日:42:09.227 15315-15315 /? d/AndroidRuntime:關閉VM
--------- beginning of crash
3月5日至9日:42:09.228 15315-15315 /? E/AndroidRuntime:致命例外:main 進程:com.mytrendin.mytrendin,PID:15315 java.lang.NullPointerException:試圖調用虛方法.mytrendin.dashboard.utils.Po stitems $ Guid(ZygoteInit.java:755)
你是否做了什麼了嗎?發佈您的代碼,以便我們可以幫助您完成您的工作 –
嘗試檢查https://github.com/eurosecom/Attendance/blob/master/app/src/main/java/com/eusecom/attendance/fragments/RetrofitFragment方法onListContributorsWithFullUserInfoClicked()中的.java我調用由Rx zip運算符ziped的2個retrofitservices。 – eurosecom
觀看https://github.com/kaushikgopal/RxJava-Android-Samples/blob/master/README.md#4-networking-with-retrofit--rxjava-using-zip-flatmap – eurosecom