版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zuiaisha1/article/details/61202252
使用retrofit完成音乐API的封装
音乐API
http://blog.csdn.net/zuiaisha1/article/details/61200422
代码结构
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;
}
}