大家好,大家好!
我有两个独立的 api(lastFM 和 iTune)源。代码分别为 ich 工作,我可以搜索(过滤)我想要的艺术家。现在我想组合结果,使用这种 RXJava 方法并在 RecyclerView 中显示它们。
我正在阅读Observable.zip
或简单合并(顺序并不重要),但我在这个问题上停留了太久,我不知道如何开始..我应该为组合创建下一个模型,例如:
public class iTuneAndLastFM {
public JsonArray iTuneObject;
public JsonArray LastFmObject;
public iTuneAndLastFM(JsonArray iTuneObject, JsonArray lastFmObject) {
this.iTuneObject = iTuneObject;
LastFmObject = lastFmObject;
}
}
还是没有必要?我卡在这里,我不能动..所以请帮忙!
我目前的工作(情况):
public interface ServiceItune
String API_ITUNE_BASE_FULL_URL = "https://itunes.apple.com/search";
@GET
Observable<RootiTune> getItuneArtistNameRx2NoList(
@Url String url,
@Query("term") String artisName);
public interface ServiceLastFm
String API_LAST_FM_FULL_URL = "http://ws.audioscrobbler.com/2.0/?method=artist.search&format=json";
Observable<RootLastFm> searchArtistRx(
@Url String url,
@Query("artist") String artistName,
@Query("api_key") String key
);
我的视图模型:
public void getLastFmRx(String query) {
disposables.add(serviceLastFm.searchArtistRx(ServiceLastFm.API_LAST_FM_FULL_URL, query,ServiceLastFm.KEY_LAST_FM)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(rootLastFmList -> responseLiveData.setValue(rootLastFmList))
);
};
public void getItubnRxTest2 (String query){
disposables.add(serviceItune.getItuneArtistNameRx2NoList(ServiceItune.API_ITUNE_BASE_FULL_URL,query)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(rootiTuneList->responsItuneeLiveData.setValue(rootiTuneList) )
);
};
最后,我的 iTunes 模型:
@AutoValue
public abstract class RootiTune {
public static TypeAdapter<RootiTune> typeAdapter(Gson gson){
return new AutoValue_RootiTune.GsonTypeAdapter(gson);
}
@Nullable
@SerializedName("resultCount")
public abstract Integer getListSize();
@Nullable
@SerializedName("results")
public abstract List<ResultiTune> getListSongs();
@Nullable
@SerializedName("errorMessage")
public abstract String getErrorMessage();
}
和LastFM 模型:
public class RootLastFm {
@Expose
private Results results;
public List<ArtistLastFm> getListOfLastFm;
public Results getResults() {
return results;
}
public void setResults(Results results) {
this.results = results;
}
}