1. 程式人生 > >Android AIDL技術實戰專案-音樂播放器(二)-使用retrofit完成音樂API的封裝

Android AIDL技術實戰專案-音樂播放器(二)-使用retrofit完成音樂API的封裝

使用retrofit完成音樂API的封裝

程式碼結構
這裡寫圖片描述

1、匯入retrofit相關庫

    compile 'com.squareup.retrofit2:retrofit:2.2.0'

2、編寫介面API

public interface MusicApi {

    String MUSIC_BASE_URL = "http://tingapi.ting.baidu.com/";
    String SUB_URL = "v1/restserver/ting";

    @GET(SUB_URL)
    Call<PaySongBean> getPaySongData(@QueryMap Map
<String, String> params); @GET(SUB_URL) Call<SongLrcBean> getSongLrcData(@QueryMap Map<String, String> params); @GET(SUB_URL) Call<SongBillListBean> getSongBillListData(@QueryMap Map<String, String> params); @GET(SUB_URL) Call<SearchSongBean>
getSearchSongData(@QueryMap Map<String, String> params); @GET(SUB_URL) Call<RecommandSongListBean> getRecommandSongList(@QueryMap Map<String, String> params); //未使用的 // @GET(SUB_URL) // Call<SongLrcBean> downSong(@QueryMap Map<String, String> params); // // // @GET(SUB_URL)
// Call<SongLrcBean> getSingerInfo(@QueryMap Map<String, String> params); // @GET(SUB_URL) // Call<SongLrcBean> getSingerSongList(@QueryMap Map<String, String> params); }

3、二次封裝

public class NetManager {

    private Retrofit mRetrofit;
    private MusicApi mMusicApi;
    private OkHttpClient mClient;

    /**
     * 播放音樂
     *
     * @param songid
     * @param callBack
     */
    public void getPaySongData(String songid, NetCallBack<PaySongBean> callBack) {
        Map<String, String> params = NetHelper.getMusicApiCommonParams("baidu.ting.song.play");
        params.put("songid", songid);
        createMusicApi()
                .getPaySongData(params)
                .enqueue(callBack);
    }
    /**
     * 播放音樂
     *
     * @param songid
     * @param callBack
     */
    public void getSongLrcData(String songid, NetCallBack<SongLrcBean> callBack) {
        Map<String, String> params = NetHelper.getMusicApiCommonParams("baidu.ting.song.lry");
        params.put("songid", songid);
        createMusicApi()
                .getSongLrcData(params)
                .enqueue(callBack);
    }



    /**
     * 推薦列表
     * @param songid
     * @param num
     * @param callBack
     */
    public void getRecommandSongList(String songid, String num, NetCallBack<RecommandSongListBean> callBack) {
        Map<String, String> params = NetHelper.getMusicApiCommonParams("baidu.ting.song.getRecommandSongList");
        params.put("songid", songid);
        params.put("num", num);
        createMusicApi()
                .getRecommandSongList(params)
                .enqueue(callBack);
    }

    /**
     * 搜尋
     * @param query
     * @param callBack
     */
    public void getSearchSongData(String query, NetCallBack<SearchSongBean> callBack) {
        Map<String, String> params = NetHelper.getMusicApiCommonParams("baidu.ting.search.catalogSug");
        params.put("query", query);
        createMusicApi()
                .getSearchSongData(params)
                .enqueue(callBack);
    }

    /**
     * @param type 1-新歌榜,2-熱歌榜,11-搖滾榜,12-爵士,16-流行,21-歐美金曲榜,22-經典老歌榜,23-情歌對唱榜,24-影視金曲榜,25-網路歌曲榜
     * @param size  返回條目數量
     * @param offset 獲取偏移
     * @param callBack
     */
    public void getSongBillListData(int type, int size, int offset, NetCallBack<SongBillListBean> callBack) {
        Map<String, String> params = NetHelper.getMusicApiCommonParams("baidu.ting.billboard.billList");
        params.put("type", String.valueOf(type));
        params.put("size", String.valueOf(size));
        params.put("offset", String.valueOf(offset));
        createMusicApi()
                .getSongBillListData(params)
                .enqueue(callBack);
    }


    private static NetManager instance;
    private NetManager() {}
    public static NetManager getInstance() {
        if (instance == null) {
            synchronized (NetManager.class) {
                if (instance == null) {
                    instance = new NetManager();
                }
            }
        }
        return instance;
    }
    MusicApi createMusicApi() {

        if (mClient == null) {
            OkHttpClient.Builder   builder = new OkHttpClient().newBuilder();
            if(BuildConfig.DEBUG){
                builder.addNetworkInterceptor(new AGLogInterceptor());
            }
            mClient = builder.build();
        }


        if (mRetrofit == null) {
            mRetrofit = new Retrofit.Builder()
                    .baseUrl(MusicApi.MUSIC_BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(mClient)
                    .build();
        }

        if (mMusicApi == null) {
            mMusicApi = mRetrofit.create(MusicApi.class);
        }
        return mMusicApi;


    }
}