簡體   English   中英

如何進行並行或並發的API調用?

[英]How can i make parallel or concurent API calls?

我正在構建一個Android應用程序(實際上是我的第一個應用程序),它的目的是獲得與您搜索的曲目相似的曲目。 我正在使用帶有rxJava和gson的retrofit2進行通話。 對於找到的每個曲目,我都會在imageview中添加響應提供的相應圖像,但是該圖像不是實際的專輯圖像,它只是樂隊的圖像。 我想要一個相冊圖像,如果我進行相冊搜索,可以從API獲取。

因此,有沒有一種方法可以進行API調用,以返回每個曲目的專輯信息,而又不會浪費很多時間? 我希望這些調用彼此並行發生,以便對“用戶”(我)不可見。

這是我用來搜索類似曲目的代碼:

private void loadSimilarTracks() {
    String mbid = selectedTrack.getMbid();
    String artist = selectedTrack.getmArtist();
    String track = selectedTrack.getName();

    searchService = new LastFMSearchService();

    Flowable<List<TrackSimilar>> fetchDataObservable = null;
    if(!mbid.equals("")) {
        fetchDataObservable = searchService.getSimilarTracks(mbid);
    }
    else{
        fetchDataObservable = searchService.getSimilarTracks(artist, track);
    }


    mCompositeSubscription.add(fetchDataObservable
            .timeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeWith(new DisposableSubscriber<List<TrackSimilar>>() {

                @Override
                public void onNext(List<TrackSimilar> tracks) {

                    mTracks = tracks;
                    similarTrackAdapter.setTrackList(tracks);
                }

                @Override
                public void onError(Throwable e) {

                    Toast.makeText(getActivity(), "API CALL ERROR", Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onComplete() {
                    resultsView.setVisibility(View.VISIBLE);
                }
            })
    );
}

附言:我正在使用lastFM api作為我的信息。 預先感謝您的任何回復。

您的代碼很好,您可以做的一件事是,可以將代碼分成多個函數,而不是一個函數,然后將它們作為單獨的線程運行。

一個函數可以進行api調用以搜索相似的音軌,而另一個函數可以獲取圖像並信任我,從而可以顯着改善響應。 希望能幫助到你..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM