转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51290181

觉得博文有用,请点赞,请留言,请关注,谢谢!~

实现功能:
实现NetMusicListAdapter(网络音乐列表适配器)
实现SearchResult(搜索音乐对象)
使用Jsoup组件请求网络,并解析音乐数据,并,音乐数据加载到列表中
实现FooterView

截止到目前的源码下载:
http://download.csdn.net/detail/iwanghang/9747505[免积分]
http://download.csdn.net/detail/iwanghang/9507635[1积分]

Jsoup组件导入:
AndroidStudio简单快速导入GitHub中的第三方组件 :
http://blog.csdn.net/iwanghang/article/details/51283763

Jsoup简介及中文API:
http://blog.csdn.net/iwanghang/article/details/51282403
http://blog.csdn.net/iwanghang/article/details/51283638
http://blog.csdn.net/iwanghang/article/details/51283659

实现效果如图:

FooterView:

实现代码如下:
NetMusicListFragment如下:

package com.iwanghang.drmplayer;import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;import com.iwanghang.drmplayer.adapter.MyMusicListAdapter;
import com.iwanghang.drmplayer.adapter.NetMusicListAdapter;
import com.iwanghang.drmplayer.utils.AppUtils;
import com.iwanghang.drmplayer.utils.Constant;
import com.iwanghang.drmplayer.utils.SearchMusicUtils;
import com.iwanghang.drmplayer.vo.Mp3Info;
import com.iwanghang.drmplayer.vo.SearchResult;import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;import java.io.IOException;
import java.util.ArrayList;public class NetMusicListFragment extends Fragment implements OnItemClickListener,OnClickListener {private ListView listView_net_music;//private ArrayList<Mp3Info> mp3Infos;private LinearLayout load_layout;private LinearLayout ll_search_btn_container;private LinearLayout ll_search_container;private ImageButton ib_search_btn;private EditText et_search_content;private NetMusicListAdapter netMusicListAdapter;//存放 网络音乐 的集合private ArrayList<SearchResult> searchResults = new ArrayList<SearchResult>();private int page = 1;//搜索音乐的页码private MainActivity mainActivity;//private boolean isPause = false;//歌曲播放中的暂停状态private int position = 0;//当前播放的位置,提供给PlayActivity//onAttach(),当fragment被绑定到activity时被调用(Activity会被传入.).@Overridepublic void onAttach(Context context) {super.onAttach(context);//mainActivity = (MainActivity) context;mainActivity = (MainActivity) getActivity();}public static NetMusicListFragment newInstance() {NetMusicListFragment net = new NetMusicListFragment();return net;}@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {//UI组件初始化View view = inflater.inflate(R.layout.net_music_list_layout,null);//itemlistView_net_music = (ListView) view.findViewById(R.id.listView_net_music);//findViewByIdload_layout = (LinearLayout) view.findViewById(R.id.load_layout);ll_search_btn_container = (LinearLayout) view.findViewById(R.id.ll_search_btn_container);ll_search_container = (LinearLayout) view.findViewById(R.id.ll_search_container);ib_search_btn = (ImageButton) view.findViewById(R.id.ib_search_btn);et_search_content = (EditText) view.findViewById(R.id.et_search_content);//Item点击事件监听listView_net_music.setOnItemClickListener(this);//按钮点击事件监听ll_search_btn_container.setOnClickListener(this);ib_search_btn.setOnClickListener(this);loadNetData();//加载网络音乐return view;}private void loadNetData() {load_layout.setVisibility(View.VISIBLE);//加载网络音乐的异步任务new LoadNetDataTask().execute(Constant.BAIDU_URL + Constant.BAIDU_DAYHOT);}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.ll_search_btn_container:ll_search_btn_container.setVisibility(View.GONE);ll_search_container.setVisibility(View.VISIBLE);break;case R.id.ib_search_btn://搜索事件searchMusic();break;}}//搜索音乐private void searchMusic() {//隐藏键盘AppUtils.hideInputMethod(et_search_content);ll_search_btn_container.setVisibility(View.VISIBLE);ll_search_container.setVisibility(View.GONE);//获取输入的文字String key = et_search_content.getText().toString();if (TextUtils.isEmpty(key)){//如果为空,则,Toast提示Toast.makeText(mainActivity,"请输入歌手或歌词",Toast.LENGTH_SHORT).show();return;}load_layout.setVisibility(View.VISIBLE);//加载layout效果.显示//填充item 使用SearchMusicUtils搜索音乐工具类,并,使用观察者设计模式,自己回调,自己监听//SearchMusicUtils.}//加载网络音乐的异步任务//Android1.5提供了 工具类 android.os.AsyncTask,它使创建异步任务变得更加简单,不再需要编写任务线程和Handler实例即可完成相同的任务。class LoadNetDataTask extends AsyncTask<String,Integer,Integer>{//onPreExecute方法用于在执行后台任务前做一些UI操作@Overrideprotected void onPreExecute() {super.onPreExecute();load_layout.setVisibility(View.VISIBLE);//加载layout.显示listView_net_music.setVisibility(View.GONE);//item.隐藏searchResults.clear();//搜索结果.清理}//doInBackground方法内部执行后台任务,不可在此方法内修改UI@Overrideprotected Integer doInBackground(String... params) {String url = params[0];try {//使用Jsoup组件请求网络,并解析音乐数据Document doc = Jsoup.connect(url).userAgent(Constant.USER_AGENT).timeout(6*1000).get();
//</span></span><span class="song-title " style='width: 240px;'><a href="/song/121353608" target="_blank" title="刘珂矣半壶纱" data-film="null">半壶纱</a></span><span class="singer"  style="width: 240px;" >                         <span class="author_list" title="刘珂矣">
//<a hidefocus="true" href="/artist/132632388">刘珂矣</a>            </span>
//</span></span><span class="song-title " style='width: 240px;'><a href="/song/264506450" target="_blank" title="韩磊千年一般若" data-film="null">千年一般若</a><div class="extra-info"><span class="appendix">影视原声</span></div></span><span class="singer"  style="width: 240px;" >                            <span class="author_list" title="韩磊">
//<a hidefocus="true" href="/artist/1302">韩磊</a>          </span>//从doc分析以上html代码;把所有span标签下song-title查找出来,存在songTitles集合中;即,歌名集合;//从doc分析以上html代码;把所有span标签下author_list查找出来,存在artists集合中;即,歌手集合;Elements songTitles = doc.select("span.song-title");Elements artists = doc.select("span.author_list");//System.out.println(artists);for (int i=0;i<songTitles.size();i++){SearchResult searchResult = new SearchResult();//System.out.println("@searchResult : " + searchResult);//<a href="/song/121353608"//<a href="/song/264506450"//a链接,存在urls集合中;即,歌曲url集合;//a链接,第一个a连接,href属性的值;即,最终的url;//a链接,第一个a连接,text(a链接的内容,例:>半壶纱<,半壶纱就是a链接的内容);即,最终的歌名;Elements urls = songTitles.get(i).getElementsByTag("a");//System.out.println("@urls : " + urls);searchResult.setUrl(urls.get(0).attr("href"));//设置最终的urlsearchResult.setMusicName(urls.get(0).text());//设置最终的歌名//a链接,存在urls集合中;即,歌曲url集合;Elements artistElements = artists.get(i).getElementsByTag("a");//System.out.println("@artistElements : " + artistElements);searchResult.setArtist(artistElements.get(0).text());//设置最终的歌手searchResult.setAlbum("热歌榜");//设置最终的专辑System.out.println("@searchResult : " + searchResult);searchResults.add(searchResult);//把最终的所有信息,添加到集合}System.out.println("@searchResults : " + searchResults);//System.out.println("@songTitles.size() : " + searchResults.size());} catch (IOException e) {e.printStackTrace();return -1;}return 1;}//onPostExecute方法用于在执行完后台任务后更新UI,显示结果@Overrideprotected void onPostExecute(Integer result) {super.onPostExecute(result);if (result==1){netMusicListAdapter = new NetMusicListAdapter(mainActivity,searchResults);//System.out.println(searchResults);listView_net_music.setAdapter(netMusicListAdapter);listView_net_music.addFooterView(LayoutInflater.from(mainActivity).inflate(R.layout.footviwe_layout,null));}load_layout.setVisibility(View.GONE);listView_net_music.setVisibility(View.VISIBLE);}}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {}
}

NetMusicListAdapter如下:

package com.iwanghang.drmplayer.adapter;import android.content.Context;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;import com.iwanghang.drmplayer.R;
import com.iwanghang.drmplayer.utils.MediaUtils;
import com.iwanghang.drmplayer.vo.Mp3Info;
import com.iwanghang.drmplayer.vo.SearchResult;import java.util.ArrayList;/*** 自定义的音乐列表适配器(网络)* 为了方便扩展,因为之前没有考虑到显示专辑封面* Created by iwanghang on 30/4/16.*/
public class NetMusicListAdapter extends BaseAdapter{private Context ctx; //上下文对象引用private ArrayList<SearchResult> searchResults;//存放SearchResult引用的集合private SearchResult searchResult;//SearchResult对象引用//private int pos = -1;            //列表位置/*** 构造函数* @param ctx    上下文* @param searchResults  集合对象*/public NetMusicListAdapter(Context ctx, ArrayList<SearchResult> searchResults){this.ctx = ctx;this.searchResults = searchResults;//System.out.println("MyMusicListAdapter.java #0 : ctx = " + ctx + ",mp3Infos = " + mp3Infos.size());}public ArrayList<SearchResult> searchResults() {System.out.println("NetMusicListAdapter.java #1 : public ArrayList<SearchResult> searchResults() {");return searchResults;}public void setSearchResults(ArrayList<SearchResult> searchResults) {System.out.println("NetMusicListAdapter.java #2 : public void setMp3Infos(ArrayList<SearchResult> searchResults) {");this.searchResults = searchResults;}@Overridepublic int getCount() {//System.out.println("NetMusicListAdapter.java #3 : public int getCount() {" + mp3Infos.size());//return mp3Infos.size();return searchResults.size();}@Overridepublic Object getItem(int position) {System.out.println("NetMusicListAdapter.java #4 : public Object getItem(int position) {");return searchResults.get(position);}@Overridepublic long getItemId(int position) {//System.out.println("NetMusicListAdapter.java #5 : public long getItemId(int position) {");return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {//System.out.println("NetMusicListAdapter.java #6 : public View getView ");ViewHolder vh;if(convertView==null){//vh = new ViewHolder();convertView = LayoutInflater.from(ctx).inflate(R.layout.item_net_music_list,null);vh = new ViewHolder();vh.textView1_title = (TextView) convertView.findViewById(R.id.textView1_title);vh.textView2_singer = (TextView) convertView.findViewById(R.id.textView2_singer);//vh.textView3_time = (TextView) convertView.findViewById(R.id.textView3_time);//vh.imageView1_ablum = (ImageView) convertView.findViewById(R.id.imageView1_ablum);//System.out.println("NetMusicListAdapter.java #7 : textView1_title = " + vh.textView1_title);convertView.setTag(vh);//表示给View添加一个格外的数据,}else {vh = (ViewHolder)convertView.getTag();//通过getTag的方法将数据取出来}SearchResult searchResult = searchResults.get(position);vh.textView1_title.setText(searchResult.getMusicName());//显示标题vh.textView2_singer.setText(searchResult.getArtist());//显示歌手//vh.textView3_time.setText(MediaUtils.formatTime(mp3Info.getDuration()));//显示时长//获取专辑封面图片//Bitmap albumBitmapItem = MediaUtils.getArtwork(ctx,mp3Info.getId(),mp3Info.getAlbumId(),true,true);//System.out.println("NetMusicListAdapter.java #8 : albumBitmapItem = " + albumBitmapItem.getConfig());//改变播放界面专辑封面图片//vh.imageView1_ablum.setImageBitmap(albumBitmapItem);//vh.imageView1_ablum.setImageResource(R.mipmap.music);return convertView;}/*** 定义一个内部类* 声明相应的控件引用*/static class ViewHolder{//所有控件对象引用TextView textView1_title;//标题TextView textView2_singer;//歌手//TextView textView3_time;//时长//ImageView imageView1_ablum;//专辑封面图片}
}

SearchResult如下:

package com.iwanghang.drmplayer.vo;/*** Created by iwanghang on 16/4/29.* 搜索音乐的对象*/
public class SearchResult {private String musicName;private String url;private String artist;private String album;private long size;//大小//set方法,get方法public String getMusicName() {return musicName;}public void setMusicName(String musicName) {this.musicName = musicName;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getArtist() {return artist;}public void setArtist(String artist) {this.artist = artist;}public String getAlbum() {return album;}public void setAlbum(String album) {this.album = album;}public long getSize() {return size;}public void setSize(long size) {this.size = size;}@Overridepublic String toString() {return "SearchResult{" +"musicName='" + musicName + '\'' +", url='" + url + '\'' +", artist='" + artist + '\'' +", album='" + album + '\'' +", size=" + size +'}';}
}

footview_layout.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@+id/textView4"xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:padding="10dp"android:gravity="center"android:textSize="10sp"android:textColor="#a6a8a8"android:text="已经到最后了">
</TextView>
欢迎移动开发爱好者交流
沈阳或周边城市公司有意开发Android,请与我联系
联系方式

微信:iwanghang
QQ:413711276
邮箱:iwanghang@qq.com

转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51290181

项目源码(打赏1积分请点这边):http://download.csdn.net/detail/iwanghang/9507635

项目源码(免积分下载请点这边):http://download.csdn.net/detail/iwanghang/9747505

Android开发本地及网络Mp3音乐播放器系列博文汇总:
Android开发本地及网络Mp3音乐播放器(一)前言
Android开发本地及网络Mp3音乐播放器(二)SplashActivity(欢迎界面)
Android开发本地及网络Mp3音乐播放器(三)MainActivity(主界面)
Android开发本地及网络Mp3音乐播放器(四)实现音乐播放
Android开发本地及网络Mp3音乐播放器(五)实现专辑封面图片
Android开发本地及网络Mp3音乐播放器(六)实现独立音乐播放界面
Android开发本地及网络Mp3音乐播放器(七)循环模式与专辑倒影
Android开发本地及网络Mp3音乐播放器(八)状态存取与界面滑动
Android开发本地及网络Mp3音乐播放器(九)音乐收藏与列表切换
Android开发本地及网络Mp3音乐播放器(十)最近播放界面与数据保存更新
Android开发本地及网络Mp3音乐播放器(十一)使用Jsoup组件请求网络,并解析音乐数据
Android开发本地及网络Mp3音乐播放器(十二)创建NetMusicListAdapter、SearchResult显示网络音乐列表
Android开发本地及网络Mp3音乐播放器(十三)网络音乐搜索功能实现,歌名歌手专辑名搜索
Android开发本地及网络Mp3音乐播放器(十四)网络音乐下载功能实现
Android开发本地及网络Mp3音乐播放器(十五)网络音乐及歌词下载功能实现
Android开发本地及网络Mp3音乐播放器(十六)歌词显示及滚动事件实现、ViewPager使用
Android开发本地及网络Mp3音乐播放器(十七)已存在歌曲歌词下载
Android开发本地及网络Mp3音乐播放器(十八)新下载歌曲加载准备SdcardSearchToList
Android开发本地及网络Mp3音乐播放器(十九)通知媒体库更新刚下载的MP3
Android开发本地及网络Mp3音乐播放器(二十)歌曲下载完成后通知主界面更新本地音乐

觉得博文有用,请点赞,请留言,请关注,谢谢!~

Android开发本地及网络Mp3音乐播放器(十二)创建NetMusicListAdapter、SearchResult显示网络音乐列表相关推荐

  1. C#制作简单的本地音乐播放器(二)—— 显示歌词

    此篇文章主要补充 C#制作简单的本地音乐播放器(一) 中的"歌词显示"部分的内容. 页面设计部分 相关内容 本程序使用的歌词文件为lrc格式,lrc是英文lyric(歌词)的缩写, ...

  2. 画出android音乐播放器的类图,基于Qt图形框架音乐播放器的设计与实现

    随着互联网软件行业的快速发展,应用市场的软件种类更是琳琅满目,其中,生活娱乐类的软件种类最为繁多,就以本文涉及到的音乐播放器(多媒体)来说,国内目前的主流音乐播放器有QQ音乐.酷狗音乐.百度音乐.网易 ...

  3. Android音乐播放器(二)登录注册界面

    这是去年大二做的一个简单音乐播放器项目:是尽可能模仿酷狗音乐写的,具体实现的功能如下: 1:启动动画:点击运行程序会出现一个两秒钟的视频,类似酷狗音乐的启动动画一样,非常可观! 2:登录注册界面:输入 ...

  4. Java和vue实现音乐播放器_躁!DJ 风格 Java 桌面音乐播放器

    本文适合有 Java 基础知识的人群,跟着本文可学习和运行 Java 版桌面 DJ 音乐播放器. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列 ...

  5. php项目网页音乐播放器插件,10个免费开源的JS音乐播放器插件

    10个免费开源的JS音乐播放器插件 三月 24, 2015 评论 (3) Sponsor 音乐播放器在网页设计中有时候会用到,比如一些时尚类.音乐或影视类等项目,但这些网页播放器插件比较少见,所以这里 ...

  6. ehshig蒙文歌曲_额格希格音乐播放器_额格希格音乐播放器安卓版下载_额格希格音乐播放器最新版app下载_好趣手游网...

    额格希格蒙语版是一款颇具民族特色的蒙文歌曲下载软件.额格希格音乐播放器收集了最全的蒙文歌曲曲库,各种经典的蒙文歌曲以及当前流行的蒙文流行歌全都有,深受广大内蒙用户喜爱! 软件介绍 想了解蒙语音乐或者想 ...

  7. Android开发本地及网络Mp3音乐播放器(十八)新下载歌曲加载准备SdcardSearchToList

    转载请注明出处: http://blog.csdn.net/iwanghang/article/details/51395664 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 扫描本地文件加载到it ...

  8. Android开发之本地音乐播放器(二)

    此次音乐播放器是针对上一个:https://blog.csdn.net/qq_43433255/article/details/88084420 开发出来的一个功能增强型,基本实现功能为: 通过列表管 ...

  9. 【创新项目实训】Android移动开发教学app案例之音频播放器(二)

    教学app案例之音频播放器(二) 一.开发环境 二.项目介绍 三.开始主界面 四.显示歌曲列表 五.播放音乐的服务 六.实现播放音乐 一.开发环境 软件环境: Android Studio 4.1.3 ...

最新文章

  1. ROS nodelet的使用
  2. JVM启动的时候,默认加入的属性
  3. Node.js与Express4安装与配置
  4. LWUIT显示中文问题
  5. java 根据客户端重定向_Java Web笔记 - 转发与重定向的区别与在FireBug客户端的表现...
  6. 中文高频词汇统计并绘制词云
  7. Google Bigtable
  8. rabbin负载均衡
  9. DPM 检测源码分析
  10. javascript动画系列第二篇——磁性吸附
  11. 单分子荧光原位杂交(smFISH)
  12. XML的四种解析器原理及性能比较
  13. 算法笔记_171:历届试题 小朋友排队(Java)
  14. Linux 命令行常用快捷键
  15. win10计算机管理员权限删除,win10需要管理员权限删除文件怎么办?获取管理员权限删除文件夹...
  16. Java分布式系统框架教程,架构设计
  17. Java IO(非常详细)
  18. 关于惠普打印机可以打印但是无法扫描的问题
  19. linux备份文件命令
  20. moment.js多语言列表

热门文章

  1. android 手柄 一键宏,手柄一键宏 | 手游网游页游攻略大全
  2. 姚期智清华计算机专业,他是诺奖获得者,他从美国挖来姚期智,让清华计算机专业问鼎全球...
  3. 肽核酸PNA-多肽PNA-TPP|Glt-Ala-Ala-Pro-Leu-pNA|Suc-Ala-Pro-pNA|Suc-AAPL-pNA|Suc-AAPM-pNA
  4. 水果店经营状况数据分析,水果店数据分析方案
  5. 拼多多从技术领域探讨为何不出评论,不提高权重
  6. leetcode 896单调数列
  7. Fedora dnf gcc 时候警告/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-x86_64问题
  8. 玖乐解密垃圾某山代刷网废话不多自行看就行了可二开可运营
  9. webpack-chain项目中文翻译
  10. AID Learning V0.87F3 使用说明文档