`

android播放器(music player)源码分析3(页面解析,ArrayListCursor)

 
阅读更多

一。首先介绍ArrayListCursor的使用,该类的可以将ArrayList包装为cursor,从而实现的游标适配器。这里重载了ArrayListCursor,生成一个可以包装自定义数据结构的游标。

Java代码
  1. publicArrayListCursor(String[]columnNames,ArrayList<ArrayList<Object>>rows,StringcatagoryColumnNames,Objectcatagory){
  2. intcolCount=columnNames.length;
  3. booleanfoundID=false;
  4. //Addan_idcolumnifnotincolumnNames
  5. for(inti=0;i<colCount;++i){
  6. if(columnNames[i].compareToIgnoreCase("_id")==0){
  7. mColumnNames=columnNames;
  8. foundID=true;
  9. break;
  10. }
  11. }
  12. if(!foundID){
  13. mColumnNames=newString[colCount+1];
  14. System.arraycopy(columnNames,0,mColumnNames,0,columnNames.length);
  15. mColumnNames[colCount]="_id";
  16. }
  17. introwCount=rows.size();
  18. mRows=newArrayList<ArrayList<Object>>();
  19. intindex=-1;
  20. for(inti=0;i<columnNames.length;i++){
  21. if(columnNames[i]==catagoryColumnNames)
  22. index=i;
  23. }
  24. if(index==-1)
  25. try{
  26. thrownewException("invadecolumnname");
  27. }catch(Exceptione){
  28. e.printStackTrace();
  29. }
  30. for(inti=0;i<rowCount;++i){
  31. if(!rows.get(i).get(index).equals(catagory))
  32. continue;
  33. mRows.add(rows.get(i));
  34. if(!foundID){
  35. mRows.get(i).add(i);
  36. }
  37. }
  38. }

这里可以加入相应列的列名和其属性值,本来想直接对cursor进行内部属性的过滤,可是google了半天没搞懂怎么直接对包装生成的cursor进行操作。虽然FilterQueryProvider可以实现属性过滤,貌似该类是基于sql语句的从而其层次要低于cursor所在的层次。⊙﹏⊙b汗,搞了好久还是以悲剧结束。

于是在没有别的办法,就自己重载了AbstractCursor类,在构造函数里面实现对属性的过滤。

二。页面解析。在原有的播放器源码上实现在线播放,第一步就是要解析得到所需的资源。首先对这源码表示崇拜一下,没想到内部源码写的真的很完美(就我个人而言),想实现在线播放比较容易,只需要将自己的一些逻辑加进去,该源码已经提供了完整的在线播放的功能。这里首先介绍下百度音乐的解析

Java代码
  1. publicstaticArrayList<ArrayList<Object>>parsertoArray(){
  2. URLurl;
  3. try{
  4. url=newURL("http://list.mp3.baidu.com/index.html");
  5. Stringrex1="<divclass=/"li/">(.*?<span>(.*?)</span>.*?)</div>";
  6. Stringrex2=".*?<a.*?href=/"(.*?)/".*?>(.*?)</a>.*?";
  7. ArrayList<ArrayList<Object>>result=Rex.match(url,rex1,rex2);
  8. returnresult;
  9. }catch(MalformedURLExceptione){
  10. //TODOAuto-generatedcatchblock
  11. e.printStackTrace();
  12. returnnull;
  13. }
  14. }

以上代码将歌手,音乐类别和歌曲抽取出来

Java代码
  1. classCatagoryCursorAdapterextendsSimpleCursorAdapter{
  2. privateintmCatagoryID;
  3. publicCatagoryCursorAdapter(Contextcontext,intlayout,Cursorc,
  4. String[]from,int[]to,intcatagoryID){
  5. super(context,layout,c,from,to);
  6. String[]mCursorCols=newString[]{MediaStore.OnLine.ID,
  7. MediaStore.OnLine.NAME,MediaStore.OnLine.URL,MediaStore.OnLine.CATAGORY_ID,MediaStore.OnLine.CATAGORY_VALUE};
  8. mCatagoryID=catagoryID;
  9. ArrayListCursorcurrentCursor=newArrayListCursor(mCursorCols,currentArray,MediaStore.OnLine.CATAGORY_ID,mCatagoryID);
  10. changeCursor(currentCursor);
  11. }
  12. }

通过这个适配其将百度音乐页头的那部分按照android的布局显示出来,具体处理就不细说了。当用户点击一个分类是则显示该类别下的所有音乐,这个暂时未实行。不过点击一个歌手类别时显示该类别下所有歌手已经完成,代码如下

Java代码
  1. privatevoidinitCursor(){
  2. //创建URL对象
  3. //给定一个URL,例如<Ahref="http://list.mp3.baidu.com/top/top200.html">http://list.mp3.baidu.com/top/top200.html</A>
  4. Stringrex="<td><span>(.*?)//.</span><ahref=/"(.*?)/".*?>(.*?)</a></td>";
  5. ArrayList<ArrayList<Object>>result=Rex.match(mOnlineURL,rex);
  6. mCursorCols=newString[]{MediaStore.OnLine.ID,MediaStore.OnLine.RANK,
  7. MediaStore.OnLine.URL,MediaStore.OnLine.NAME};
  8. mTrackCursor=newArrayListCursor(mCursorCols,result);
  9. }

这样播放在线音乐的资源大类已经基本都实现了,接下来就是歌曲资源的解析和播放。

转载于http://ishelf.javaeye.com/admin/blogs/733920

分享到:
评论

相关推荐

    pyzmq-23.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    腾讯全端Bootstrap响应式布局

    使用媒体查询和Bootstrap框架,模仿腾讯全端响应式网页布局。

    前端开发框架介绍及bootstrap项目资源

    前端开发框架介绍及bootstrap项目实现网页轮播图效果

    企业级网络设计与配置实战案例

    教程:计算机网络基础 标题: 计算机网络基础入门教程 简介: 本教程旨在为初学者提供计算机网络的全面基础知识,包括网络拓扑、协议栈、OSI模型、IP地址、子网划分、路由器和交换机的基本概念和操作等。通过理论和实践相结合的方式,让学习者能够掌握网络的基本构成和功能。 案例:企业级网络配置案例分析 标题: 企业级网络设计与配置实战案例 简介: 本案例详细介绍了一个中型企业网络升级项目的全过程,包括需求分析、网络设计、设备选型、配置实施及测试验证。重点讲解了VLAN划分、路由协议配置、安全策略实施等关键技术的应用,旨在通过实际项目案例,帮助学习者了解企业网络建设的常见需求和解决方案。

    IMG_20240607_180258.png

    IMG_20240607_180258.png

    grpcio-1.7.0-cp35-cp35m-macosx_10_7_intel.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    05外墙内保温工程-石膏板外墙内保温.doc

    05外墙内保温工程-石膏板外墙内保温

    cryptography-3.4.3-cp36-abi3-win_amd64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    grpcio-1.8.6-cp36-cp36m-macosx_10_7_intel.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    pyzmq-23.0.0b2-cp39-cp39-musllinux_1_1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    PHP项目-问卷调查.zip

    php PHP项目--问卷调查.zip

    分布式锁与信号量.docx

    分布式锁与信号量 分布式锁与信号量 一、分布式锁 定义: 分布式锁是在分布式系统环境下,通过锁机制来让多个客户端互斥地对共享资源进行访问的一种机制。 原理: 分布式锁能够保证在分布式系统中,多个节点对同一个资源进行并发访问时的互斥性。 分布式锁的实现通常依赖于底层的数据存储系统,如数据库、缓存系统(如Redis)或分布式存储系统(如ZooKeeper)。 实现方式: 基于数据库的分布式锁实现:通过数据库中的表来存储锁的状态信息,利用数据库的事务机制确保只有一个节点能够成功获取到锁。 基于缓存的分布式锁实现:使用分布式缓存系统(如Redis)来存储锁的状态信息。通过在缓存中存储一个特定的键值对来表示锁的状态,其他节点在获取锁时可以尝试设置该键值对并检查是否设置成功来确定是否可以获取锁。 基于分布式存储系统的分布式锁实现:通过创建临时顺序节点来实现锁的获取和释放。节点的创建顺序可以表示锁的获取顺序,其他节点在获取锁时可以监听节点的变化来确定是否可以获取锁。 应

    pyzmq-25.1.2-cp39-cp39-musllinux_1_1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    widgetsnbextension-4.0.0a3-py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    widgetsnbextension-4.0.0a1-py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    协同过滤算法简介+源代码+文档说明

    - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

    pyzmq-25.1.1b1-cp39-cp39-musllinux_1_1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    Werkzeug-0.5.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    12电气竖井内电缆桥架工程.doc

    12电气竖井内电缆桥架工程

    grpcio-1.28.1-cp37-cp37m-win32.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

Global site tag (gtag.js) - Google Analytics