今天主要分析音乐搜索这部分的实现机制
Jamendo代码里面实现音乐搜索主要是使用了Apache Http 4.0 和JSON,Jamendo官网提供API供应用程序查询数据,且提供了四种方式查询,依次是:Artist,Tag,UserPlaylist和UserStarredAlbums
具体分析如下:
private void albumSearch(int id){
JamendoGet2Api service = new JamendoGet2ApiImpl();
String query = mSearchEditText.getText().toString();
Album[] albums = null;
try {
switch (id) {
case 0:
albums = service.searchForAlbumsByArtist(query);
SearchActivity.this.mSearchMode = SearchMode.Artist;
break;
case 1:
albums = service.searchForAlbumsByTag(query);
SearchActivity.this.mSearchMode = SearchMode.Tag;
break;
case 3:
albums = service.getUserStarredAlbums(query);
SearchActivity.this.mSearchMode = SearchMode.UserStarredAlbums;
break;
default:
return;
}
AlbumAdapter albumAdapter = new AlbumAdapter(SearchActivity.this);
albumAdapter.setList(albums);
albumAdapter.setListView(mSearchListView);
mAdapter = albumAdapter;
} catch (JSONException e) {
e.printStackTrace();
} catch (WSError e) {
publishProgress(e);
this.cancel(true);
}
}
在代码中提供了JamendoGet2Api接口及其接口实现JamendoGet2ApiImpl,那我们看看JamendoGet2Api提供了什么
/**
* Retrieve "this week's most popular albums"
* <br><br>
* http://api.jamendo.com/get2/id+name+url+image+artist_name/album/jsonpretty/?n=5&order=ratingweek_desc
* @return an array of albums
* @throws JSONException
* @throws WSError
*/
Album[] getPopularAlbumsWeek() throws JSONException, WSError;
随便拿一个查询PopularAlbumsWeek()函数来分析,通过看其注释,可以看出,Jamendo提供了http://api.jamendo.com/get2/id+name+url+image+artist_name/album/jsonpretty/?n=5&order=ratingweek_desc供应用程序查询和调用
很明显是采用JSON的方式与服务器进行数据交互。接下来我们看看getPopularAlbumsWeeK()的实现:
private String doGet(String query) throws WSError{
return Caller.doGet(GET_API + query);
}
@Override
public Album[] getPopularAlbumsWeek() throws JSONException, WSError {
String jsonString = doGet("id+name+url+image+rating+artist_name/album/json/?n=20&order=ratingweek_desc");
if(jsonString == null)
return null;
JSONArray jsonArrayAlbums = new JSONArray(jsonString);
return AlbumFunctions.getAlbums(jsonArrayAlbums);
}
调用Caller.doGet(GET_API+query):
/**
* Performs HTTP GET using Apache HTTP Client v 4
*
* @param url
* @return
* @throws WSError
*/
public static String doGet(String url) throws WSError{
String data = null;
if(requestCache != null){
data = requestCache.get(url);
if(data != null){
Log.d(JamendoApplication.TAG, "Caller.doGet [cached] "+url);
return data;
}
}
// initialize HTTP GET request objects
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse;
try {
// execute request
try {
httpResponse = httpClient.execute(httpGet);
} catch (UnknownHostException e) {
WSError wsError = new WSError();
wsError.setMessage(e.getLocalizedMessage());
throw wsError;
} catch (SocketException e){
WSError wsError = new WSError();
wsError.setMessage(e.getLocalizedMessage());
throw wsError;
}
// request data
HttpEntity httpEntity = httpResponse.getEntity();
if(httpEntity != null){
InputStream inputStream = httpEntity.getContent();
data = convertStreamToString(inputStream);
// cache the result
if(requestCache != null){
requestCache.put(url, data);
}
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Log.d(JamendoApplication.TAG, "Caller.doGet "+url);
return data;
}
在程序中调用convertStreamToString()讲Stream流转换成String
private static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
然后在通过调用JSON提供的API方法,JSONArray jsonArrayAlbums = new JSONArray(jsonString);
public static Album[] getAlbums(JSONArray jsonArrayAlbums) throws JSONException {
int n = jsonArrayAlbums.length();
Album[] albums = new Album[n];
AlbumBuilder albumBuilder = new AlbumBuilder();
for(int i=0; i < n; i++){
albums[i] = albumBuilder.build(jsonArrayAlbums.getJSONObject(i));
}
return albums;
}
至此整个搜索完成
最后总结下整个过程:
1.获得调用的API URL链接,调用Caller.doGet() 实现方式是通过HttpClient,然后就是将获得的Stream转换成JSONArray构造所需要的String,最后就是调用 getAlbums(JSONArray jsonArrayAlbums) 。
- 大小: 41.3 KB
- 大小: 36.9 KB
分享到:
相关推荐
Jamendo在线音乐播放器是一款android平台在开源的在线音乐播放,该播放器的主要特色如下: 1. 界面美观,在jamendo播放器中精美的布局的随处可见,大量使用自定义控件和Adapter进行布局,这点可供初学者好好探讨...
Android应用源码之jamendo-开源在线音乐.zip项目安卓应用源码下载Android应用源码之jamendo-开源在线音乐.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
**jamendo音乐播放器源码解析** jamendo是一款知名的开源音乐播放器,它为用户提供了一个平台,可以在其中发现、收听并支持独立艺术家的音乐作品。由于其源码是开放的,开发者和爱好者可以深入研究其内部机制,学习...
本篇文章将深入探讨“telecapoland-jamendo-android-6cd07fb”这一国外开源音乐播放器的安卓源码,帮助读者理解其设计思路、架构布局以及关键功能的实现。 首先,"telecapoland-jamendo-android"是一款基于Android...
《jamendo:Android开源在线音乐播放器源代码详解》 jamendo是一款专为Android平台设计的开源音乐播放器,它提供了丰富的在线音乐资源,让用户能够免费享受来自全球各地的独立艺术家创作的音乐。这款应用的独特之处...
总之,通过研究"Android应用源码之jamendo-开源在线音乐"的源码,我们可以学习到Android应用开发的诸多技术,包括网络通信、多媒体处理、UI设计、组件交互等。这不仅有助于提升个人技能,也能为未来开发自己的音乐...
《Android应用源码解析:深度探索jamendo开源在线音乐应用》 在当今移动互联网时代,Android平台上的应用程序种类繁多,其中音乐类应用占据了一席之地。本文将深入剖析开源项目"jamendo",它是一款专为Android用户...
本资源提供的是一个基于Android系统的在线音乐播放器的完整源码,名为"telecapoland-jamendo-android-v1.0.0b-35-g847ba33",这将有助于开发者深入理解音乐播放器应用的开发过程和相关技术。 首先,我们来探讨一下...
【Android应用源码之telecapoland-jamendo-android-6cd07fb(国外开源音乐播放器)】 这个开源项目是专门为Android平台设计的一个音乐播放器,名为telecapoland-jamendo-android,版本号为6cd07fb。它允许用户浏览...
- 编程语言:常见的编程语言有Java、C++、Python等,例如,Android平台的开源播放器可能使用Java或Kotlin开发。 - 框架与库:使用跨平台框架如Qt或Flutter,可以实现多平台兼容。音频处理库如FFmpeg用于音频解码和...
Jamendo 是一个基于开源理念的在线音乐平台,它为音乐爱好者提供了一个发现、分享和下载独立音乐的全球社区。这个平台的独特之处在于它的所有音乐都遵循 Creative Commons 许可协议,这意味着用户可以自由地聆听、...
本文将围绕"应用源码之jamendo-开源在线音乐.zip"这一主题,探讨如何通过分析开源项目jamendo的源码来学习Android开发中的关键知识点,特别是对于毕业设计和代码学习者而言,这是一个极具价值的学习资源。...
【Android源码解析——jamendo开源在线音乐应用】 在安卓(Android)开发领域,了解和研究源码是提升技能、优化应用性能的重要途径。这里我们关注的是“jamendo”项目,一个开源的在线音乐应用程序,它允许用户免费...
《Android开发:jamendo开源在线音乐项目解析》 在当今数字化时代,音乐已经无处不在,而开源项目为开发者提供了无限可能。今天我们要探讨的是一个名为"jamendo"的开源在线音乐项目,它是一个专为Android平台设计的...
jamendo-开源在线音乐,这是一款来自国外的Android 原生音乐播放APP软件,支持专辑加载,支持各种音乐的播放控制,界面简洁实用,它的价值的是代码的参考性比较大,这个播放软件还可下载音乐,运行视图如截图所示,...
【标题】"应用源码之telecapoland-jamendo--6cd07fb(国外开源音乐播放器).zip" 提供的是一个基于Android平台的开源音乐播放器项目,名为Telecapoland-Jamendo。该项目的源代码可以为开发者提供深入理解Android应用...
通过分析其源代码,我们可以了解Android音乐播放器的实现机制,以及如何利用开源技术构建一个功能丰富的音乐应用。 首先,让我们关注项目的整体结构。一个典型的Android应用项目通常包含多个主要模块,如`app`(主...
《安卓Android源码分析——以telecapoland-jamendo-android-6cd07fb开源音乐播放器为例》 在移动操作系统领域,安卓Android以其开放性和灵活性吸引了大量的开发者和用户。对于那些热衷于深入理解系统运行机制或者...
jamendo 是全国最大的开源音乐播放器 是android 初学者的好实例 初学者可以通过对jamendo 源码的研究 可以对android'有基础性的认识 jamendo源码可以对四大组件都有 质的的认识和理解