Android AIDL技術實戰專案-音樂播放器(二)-使用retrofit完成音樂API的封裝
阿新 • • 發佈:2019-01-05
使用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;
}
}