使用jsou代替API获取数据

jsoup是一个强大的可以将网页html数据进行解析,这样没有API接口的情况下,也可以获取数据了。具体的用法,可取参照jsoup官方文档。

以下是使用jsoup的简单实例:


package cn.sharesdk.demo;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.ListView;
import android.widget.ProgressBar;

import com.zhy.adapter.recyclerview.wrapper.LoadMoreWrapper;

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

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.onekeyshare.OnekeyShare;

public class MainActivity extends AppCompatActivity {

    String url = "http://www.qiushibaike.com/8hr/page/";
    private int pageNum = 1;
//    private List<DataEntity> mDatas = new ArrayList<>();
    private List<BaseEntity> mDatas = new ArrayList<>();
    private SwipeRefreshLayout mSwipe;
    private ListView mListView;
    private ProgressDialog mDialog;
    private MyAdapter mAdapter;
    private RecyclerView mRecyclerView;
    private RvAdapter rvAdapter;
    private LoadMoreWrapper mLoadMoreWrapper;
    private ProgressBar mProgressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	ShareSDK.initSDK(this);
	setContentView(R.layout.activity_main);
	initView();
	initData();
	initListener();
    }

    @Override
    protected void onDestroy() {
	super.onDestroy();
	ShareSDK.stopSDK(this);
    }

    private void initListener() {
	mSwipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
	    @Override
	    public void onRefresh() {
		mDatas.clear();
		pageNum = 1;
		initData();
	    }
	});
    }

    private void initView() {
	mSwipe = (SwipeRefreshLayout) findViewById(R.id.swipe);
//	mListView = (ListView) findViewById(R.id.listView);
//	mListView.setDivider(null);
//	mAdapter = new MyAdapter(this, mDatas);
//	mAdapter.openAnimation(new ScaleAnimator());
//	mListView.setAdapter(mAdapter);


	mRecyclerView = (RecyclerView) findViewById(R.id.rv);
	mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
	rvAdapter = new RvAdapter(this, mDatas);
	rvAdapter.openAnimation(new ScaleAnimator());
	mLoadMoreWrapper = new LoadMoreWrapper(rvAdapter);


	if (mProgressBar == null)
	mProgressBar = new ProgressBar(this);
	mProgressBar.setInterpolator(new AccelerateDecelerateInterpolator());
	isShowLoadMore();
	mLoadMoreWrapper.setOnLoadMoreListener(new LoadMoreWrapper.OnLoadMoreListener() {
	    @Override
	    public void onLoadMoreRequested() {
		pageNum++;
		initData();
	    }
	});

	mRecyclerView.setAdapter(mLoadMoreWrapper);
    }

    private void isShowLoadMore() {
	if (mDatas.size() > 0) mLoadMoreWrapper.setLoadMoreView(mProgressBar);
    }

    public void updateView() {
	isShowLoadMore();
	mLoadMoreWrapper.notifyDataSetChanged();
	mSwipe.setRefreshing(false);
    }

    private void initData() {

	new AsyncTask<String,Void,List<BaseEntity>>() {

	    @Override
	    protected List<BaseEntity> doInBackground(String... params) {

		return handleData(params);
	    }

	    @Override
	    protected void onPreExecute() {

		super.onPreExecute();
//		mSwipe.setRefreshing(true);
		if (mDialog == null) {
		    mDialog = new ProgressDialog(MainActivity.this);
		    mDialog.setTitle("加载中...");
		    mDialog.show();
		}
	    }

	    @Override
	    protected void onPostExecute(List<BaseEntity> dataEntities) {
		if (mDialog != null) {
		    mDialog.dismiss();
		}
//		mDatas.clear();
		mDatas.addAll(dataEntities);
		updateView();
	    }
	}.execute(new String[]{url});


    }

    private List<BaseEntity> handleData(String[] params) {
	List<BaseEntity> dataEntities = new ArrayList<>();
	String url = params[0];
	try {

		Document document = Jsoup
			.connect(url + pageNum + "/")
			.get();
		Elements elements = document.select("a.contentHerf");
		Elements elements_author = document.select("div.author.clearfix");
		Elements elements_stats = document.select("div.stats");

		//                            Log.d("HTML内容","HTML内容:" + elements.toString());
		for (int j = 0; j < elements.size(); j++) {

		    DataEntity dataEntity = new DataEntity();

		    Element element = elements.get(j);
		    Element element_author = elements_author.get(j);
		    Element element_stats = elements_stats.get(j);

		    Elements herefs = element_author.select("a[href]");

		    Element level_women = element_author
			    .select("div.articleGender.womenIcon")
			    .first();
		    Element level_man = element_author
			    .select("div.articleGender.manIcon")
			    .first();

		    Elements numbers = element_stats.select("i.number");
		    if (numbers != null && numbers.size() >= 2) {
			Log.d("HTML内容", "好笑数:" + numbers
				.get(0)
				.text());
			Log.d("HTML内容", "评论数:" + numbers
				.get(1)
				.text());
			dataEntity.setFunnyNum(numbers
						       .get(0)
						       .text());
			dataEntity.setCommentNum(numbers
							 .get(1)
							 .text());
		    }

		    Element href_comment = element_stats
			    .select("a[href]")
			    .first();
		    String hrefComment = null;
		    if (href_comment != null) {
			hrefComment = href_comment.attr("href");
		    }

		    Log.d("HTML内容", "评论链接:" + "http://www.qiushibaike.com/8hr/page/" + pageNum + hrefComment);
		    dataEntity.setCommentLink("http://www.qiushibaike.com/8hr/page/" + pageNum + hrefComment);


		    for (int k = 0; k < herefs.size(); k++) {
			Element herefElement = herefs.get(k);
			String href = herefElement.attr("href");
			Log.d("HTML内容", "标题头链接:" + href);
			dataEntity.setTitleLink("http://www.qiushibaike.com/8hr/page/" + pageNum + href);

			Element img = herefElement
				.select("img")
				.first();
			String title = herefElement.attr("title");
			if (TextUtils.isEmpty(title)) {
			    String src = img.attr("src");
			    Log.d("HTML内容", "标题头图片:" + src);
			    dataEntity.setTitleIcon(src);
			} else {

			    Log.d("HTML内容", "标题头标题:" + title);
			    dataEntity.setTitleName(title);
			}
		    }
		    String level = null;
		    if (level_women != null) {
			Log.d("HTML内容", "标题头等级:women" + level_women.text());
			dataEntity.setSex("0"); //设置性别,女为0,男为1
			level = level_women.text();
		    } else if (level_man != null) {
			Log.d("HTML内容", "标题头等级:man" + level_man.text());
			dataEntity.setSex("1");
			level = level_man.text();
		    }

		    dataEntity.setLevel(level);


		    Log.d("HTML内容", "标题:" + element.text());
		    dataEntity.setContent(element.text());
		    //                                Log.d("HTML内容","标题头:" + element_author.text());

		    String href = element.attr("href");
		    //                                Log.d("HTML内容","详情链接:" + href);

		    Document detail_Document = Jsoup
			    .connect("http://www.qiushibaike.com" + href)
			    .get();
		    Elements text_detail = detail_Document.select(".content");
		    //                                Log.d("HTML内容","详情内容:" + text_detail.text());
		    Elements pic_detail = text_detail.select(".thumb img[src$=jpg]");
		    if (!pic_detail.isEmpty()) {
			String src = pic_detail.attr("src");
			//                                    Log.d("HTML内容","详情图片:" + src);
		    } else {
			//                                    Log.d("HTML内容","详情图片:" + "no");
		    }

		    dataEntities.add(dataEntity);
		}


	} catch (IOException e) {
	    e.printStackTrace();

	}
	return dataEntities;
    }

    public void click(View view) {
	OnekeyShare onekeyShare = new OnekeyShare();
	onekeyShare.setTitle("趣分享");
	onekeyShare.setText("我为技术带盐,我骄傲,我自豪");
	onekeyShare.setImageUrl("http://7sby7r.com1.z0.glb.clouddn.com/CYSJ_02.jpg");
	onekeyShare.setTitleUrl("http://wwww.baidu.com");
	onekeyShare.show(MainActivity.this);

	//        Intent intent = new Intent(Intent.ACTION_SEND);
	//        intent.setType("text/plain");
	//        intent.putExtra(Intent.EXTRA_SUBJECT, "我为技术带盐,我骄傲,我自豪");
	//        intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.share_contents, "趣分享", "http://wwww.baidu.com"));
	//        startActivity(Intent.createChooser(intent, getTitle()));
    }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值