木雨音乐 项目开发(十一)网络推荐——搜索歌曲

搜索歌曲

木雨音乐 APP已在百度手机助手上架,有兴趣的朋友可以下载测试,下载地址:http://shouji.baidu.com/software/9785031.htm
木雨音乐源码下载地址:http://download.csdn.net/detail/haoxue641/9610782
希望大家多提宝贵意见

搜索控件没有独立出来所以在每一个榜单Fragment里都实现了一遍所以有些代码重复的嫌疑,有兴趣的小伙伴可以简化代码
搜索工具类SearchMusicUtils.java代码如下
package com.haoxue.zixueplayer.utils;

import android.os.Handler;
import android.os.Message;

import com.haoxue.zixueplayer.vo.SearchResult;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.util.ArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import javax.xml.parsers.ParserConfigurationException;

/**
 * 搜索音乐工具类
 * Created by Administrator on 2016/8/1.
 */
public class SearchMusicUtils {
    private static final String URL=Constant.MIGU_URL+Constant.MIGU1_SEARCH1;
    private static SearchMusicUtils sInstance;
    private OnSearchResultListener mListener;

    private ExecutorService mThreadPool;

    public synchronized static SearchMusicUtils getsInstance(){
        if (sInstance == null) {
            try {
                sInstance=new SearchMusicUtils();
            } catch (ParserConfigurationException e) {
                e.printStackTrace();
            }
        }
        return sInstance;
    }

    private SearchMusicUtils() throws ParserConfigurationException{
        mThreadPool=Executors.newSingleThreadExecutor();
    }

    public SearchMusicUtils setListener(OnSearchResultListener l){
        mListener=l;
        return this;
    }

    public void search(final String key){
        final Handler handler=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what){
                    case Constant.SUCCESS:
                        if (mListener != null) mListener.onSearchResult((ArrayList<SearchResult>)msg.obj);
                        break;
                    case Constant.FAILED:
                        if (mListener != null) mListener.onSearchResult(null);
                        break;
                }
            }
        };

        mThreadPool.execute(new Runnable() {
            @Override
            public void run() {
                ArrayList<SearchResult> results=getMusicList(key);
                if (results == null) {
                    handler.sendEmptyMessage(Constant.FAILED);
                    return;
                }
                handler.obtainMessage(Constant.SUCCESS,results).sendToTarget();
            }
        });
    }

    //使用 Jsoup请求网络解析数据
    private ArrayList<SearchResult> getMusicList(final String key){
        final String pagenum="1";
        final String keytype="all";

        try {
            Document doc= Jsoup.connect(URL+key+Constant.MIGU1_SEARCH2)
                    .userAgent(Constant.USER_AGENT)
                    .timeout(60*1000).get();
            Elements songTitles=doc.select("[class=fl song_name]");
            Elements artists=doc.select("[class=fl singer_name mr5]");
            Elements albums=doc.select("[class=fl song_album]");
            ArrayList<SearchResult> searchResults=new ArrayList<>();
            for (int i = 0; i <songTitles.size() ; i++) {
                SearchResult searchResult=new SearchResult();
                Elements urls=songTitles.get(i).getElementsByTag("a");
                Elements artistElements=artists.get(i).getElementsByTag("a");
                String URL=urls.get(0).attr("href");
                String MusicName=urls.get(0).text();
                String Artist=artistElements.get(0).text();
                searchResult.setUrl(URL);
                searchResult.setMusicName(MusicName);
                searchResult.setArtist(Artist);
                searchResult.setAlbum("搜索榜");
                searchResults.add(searchResult);
            }
//            System.out.println(searchResults);
            return searchResults;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public interface OnSearchResultListener{
        public void onSearchResult(ArrayList<SearchResult> results);
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值