Http,Jsoup抓取网页内容-by TomHawk

在阅读本篇博文前,请大家先阅读另一篇博文:http://demo.netfoucs.com/isharestudio/article/details/13276195


当你阅读完上面推荐的博文时,我们现在开始介绍如何通过firefox的firebug插件获取登录广石化教务系统后的cookie,因为对于需要登录的网页,我们需要获取登录的cookie,随后利用这个cookie才能对其他的页面进行数据的抓取:


如果没有你的firefox没有firebug插件的话请先安装firebug插件,安装好之后使用firefox打开广石化教务系统网址:http://218.15.22.136:3008/,然后F12打开firebug,选择:网络->XHR->保持(这个很关键,不然进去以后就看不到我们post的那些参数信息了,而我们恰恰是要这些参数信息),如下图:

jpg

然后输入你的用户信息进行登录,可以发现:

jpg


经测试发现,前面打了标记的那5个参数是我们需要用到的,对于之后的获取课程信息需要的参数和获取成绩信息的参数同上理,接下来就进入代码环节了,由于需要解析的内容都已在代码中注释说明了,所以直接上代码:


Util类:

<span style="font-size:18px;">package com.example.schoolservice;

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

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Utils {
	
	/**
	 * 对于需要登录的页面,首先需要模拟登录获取cookie以进行下一步的数据获取
	 * 这里要登录的是广石化教务系统
	 * @param xueHao
	 * @param miMa
	 * @return
	 * @throws IOException
	 */
	public static Map<String,String> getCookies(String xueHao,String miMa) throws IOException{
		
		Map<String,String>params=new HashMap<String,String>();
		params.put("Window1$SimpleForm1$rdl_shenFen","学生");
		params.put("Window1$SimpleForm1$tbx_XueHao",xueHao);
		params.put("Window1$SimpleForm1$tbx_pwd",miMa);
		params.put("__EVENTTARGET","Window1$Toolbar1$btn_login");
		params.put("__VIEWSTATE","/wEPDwULLTE5MDM2NzU3OTVkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYGBQdXaW5kb3cxBRNXaW5kb3cxJFNpbXBsZUZvcm0xBR5XaW5kb3cxJFNpbXBsZUZvcm0xJHRieF9YdWVIYW8FG1dpbmRvdzEkU2ltcGxlRm9ybTEkdGJ4X3B3ZAUfV2luZG93MSRTaW1wbGVGb3JtMSRyZGxfc2hlbkZlbgUaV2luZG93MSRUb29sYmFyMSRidG5fbG9naW46QsMiatYU9WJ9boGIR70UrVV93cJFQf4ZdaWAHYr13w==");
		Response res = Jsoup.connect("http://218.15.22.136:3008/")
				            .data(params)
				            .timeout(30000)
				            .execute();
		Map<String,String>cookies=res.cookies();
		
		return cookies;
	}
	
	/**
	 * 获取广石化排课信息
	 * @param cookies
	 * @return
	 * @throws IOException
	 */
	public static String getCourses(Map<String,String>cookies) throws IOException{
		
		HttpClient httpclient=new DefaultHttpClient();
		HttpPost httppost=new HttpPost("http://218.15.22.136:3008/PaiKeXiTong.aspx");
		httppost.setHeader("Cookie","ASP.NET_SessionId="+cookies.get("ASP.NET_SessionId")+";XingMing="+cookies.get("XingMing"));
		httppost.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36");
		
		//需要的参数,对于需要用到哪些参数,可以通过火狐的firebug插件来查看到,另外,一下的_VIEWSTATE参数可能是会变化的,所以有时候获取数据失败的话可能要更新一下这个参数,同样是通过firebug
		ArrayList<NameValuePair>params=new ArrayList<NameValuePair>();
		params.add(new BasicNameValuePair("__EVENTTARGET","Grid1$Toolbar1$query_PaiKe"));
		params.add(new BasicNameValuePair("Grid1$Toolbar1$ddl_XueYuan","12"));//学院编号
		params.add(new BasicNameValuePair("Grid1$Toolbar1$ddl_BanJi","104623"));//班级编号
		params.add(new BasicNameValuePair("__VIEWSTATE","/wEPDwUKLTY0NjUxODI2MWQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgYFBUdyaWQxBRpHcmlkMSRUb29sYmFyMSRkZGxfWHVlWXVhbgUYR3JpZDEkVG9vbGJhcjEkZGRsX0JhbkppBRpHcmlkMSRUb29sYmFyMSRxdWVyeV9QYWlLZQUaR3JpZDEkVG9vbGJhcjEkcHJpbnRfUGFpS2UFBUdyaWQysa6FiUrMMkDf+rMWQCLJa2N1Lvhz0aGl1InAOc2yBvA="));
		params.add(new BasicNameValuePair("X_AJAX","true"));
		params.add(new BasicNameValuePair("X_STATE","eyJHcmlkMV9Ub29sYmFyMV9kZGxfWHVlWXVhbiI6eyJEYXRhVGV4dEZpZWxkIjoiamdtYyIsIkRhdGFWYWx1ZUZpZWxkIjoiamdkbSIsIlhfSXRlbXMiOltbIjAyICAiLCLmnLrnlLXlt6XnqIvlrabpmaIgICAgICAgICAgICAgIiwxXSxbIjAzICAiLCLorqHnrpfmnLrkuI7nlLXlrZDkv6Hmga/lrabpmaIgICAgICIsMV0sWyIwNCAgIiwi5bu6562R5bel56iL5a2m6ZmiICAgICAgICAgICAgICIsMV0sWyIwNSAgIiwi57uP5rWO566h55CG5a2m6ZmiICAgICAgICAgICAgICIsMV0sWyIwNiAgIiwi5paH5rOV5a2m6ZmiICAgICAgICAgICAgICAgICAiLDFdLFsiMDggICIsIuS9k+iCsuWtpuezuyAgICAgICAgICAgICAgICAgIiwxXSxbIjEwICAiLCLoibrmnK/ns7sgICAgICAgICAgICAgICAgICAgIiwxXSxbIjEyICAiLCLnkIblrabpmaIgICAgICAgICAgICAgICAgICAgIiwxXSxbIjEzICAiLCLlpJblm73or63lrabpmaIgICAgICAgICAgICAgICAiLDFdLFsiMTQgICIsIueOr+Wig+S4jueUn+eJqeW3peeoi+WtpumZoiAgICAgICAiLDFdLFsiMTUgICIsIuefs+ayueW3peeoi+WtpumZoiAgICAgICAgICAgICAiLDFdLFsiMTYgICIsIuWMluWtpuW3peeoi+WtpumZoiAgICAgICAgICAgICAiLDFdXSwiU2VsZWN0ZWRWYWx1ZSI6IjEyICAifSwiR3JpZDFfVG9vbGJhcjFfZGRsX0JhbkppIjp7IkRhdGFUZXh0RmllbGQiOiJiam1jIiwiRGF0YVZhbHVlRmllbGQiOiJiamRtIiwiWF9JdGVtcyI6W1siMzkwNyIsIuWcsOeQhijluIgpMTEtMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLDFdLFsiMTA0MzkwIiwi5Zyw55CGKOW4iCkxMS0zIiwxXSxbIjUxMDIiLCLlnLDnkIYo5biIKTEyLTEgICAgICAiLDFdLFsiMTA0NjczIiwi5Zyw55CGKOW4iCkxMi0yIiwxXSxbIjEwNDI1NCIsIuWcsOeQhijluIgpMTMtMSIsMV0sWyIxMDQ2MjUiLCLlnLDnkIYo5biIKTE0LTEiLDFdLFsiMzk2NiIsIuWcsOeQhjExLTIiLDFdLFsiMzk2NCIsIuaVmeiCsuaKgOacrzExLTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwxXSxbIjUxMDUiLCLmlZnogrLmioDmnK8xMi0xICAgICAgICAiLDFdLFsiNTEwNiIsIuaVmeiCsuaKgOacrzEyLTIgICAgICAgICIsMV0sWyIxMDQzMTciLCLmlZnogrLmioDmnK8xMy0xIiwxXSxbIjEwNDMxOCIsIuaVmeiCsuaKgOacrzEzLTIiLDFdLFsiMTA0NjI4Iiwi5pWZ6IKy5oqA5pyvMTQtMSIsMV0sWyIxMDQ2MjkiLCLmlZnogrLmioDmnK8xNC0yIiwxXSxbIjM5MTEiLCLmlbDlraYo5biIKTExLTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwxXSxbIjUwODIiLCLmlbDlraYo5biIKTEyLTEgICAgICAiLDFdLFsiMTA0MzQzIiwi5pWw5a2mKOW4iCkxMy0xIiwxXSxbIjEwNDYyMSIsIuaVsOWtpijluIgpMTQtMSIsMV0sWyIzOTc5Iiwi5pWw5a2mMTEtMiIsMV0sWyI1MDgzIiwi5pWw5a2mMTItMiAgICAgICAgICAgICIsMV0sWyIxMDQ2NTkiLCLmlbDlraYxMi0zIiwxXSxbIjEwNDM0NCIsIuaVsOWtpjEzLTIiLDFdLFsiMTA0NjIyIiwi5pWw5a2mMTQtMiIsMV0sWyIzOTY1Iiwi54mp55CGKOW4iCkxMS0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsMV0sWyI1MTAzIiwi54mp55CGKOW4iCkxMi0xICAgICAgIiwxXSxbIjEwNDM1OSIsIueJqeeQhijluIgpMTMtMSIsMV0sWyIxMDQ2MjYiLCLniannkIYo5biIKTE0LTEiLDFdLFsiMzk4MiIsIueJqeeQhjExLTIiLDFdLFsiNTEwNCIsIueJqeeQhjEyLTIgICAgICAgICAgICAiLDFdLFsiMTA0MzU4Iiwi54mp55CGMTMtMiIsMV0sWyIxMDQ2MjciLCLniannkIYxNC0yIiwxXSxbIjM5ODAiLCLkv6Hmga8xMS0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLDFdLFsiMzk4MSIsIuS/oeaBrzExLTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsMV0sWyI1MTAwIiwi5L+h5oGvMTItMSAgICAgICAgICAgICIsMV0sWyI1MTAxIiwi5L+h5oGvMTItMiAgICAgICAgICAgICIsMV0sWyIxMDQzNjAiLCLkv6Hmga8xMy0xIiwxXSxbIjEwNDM2MSIsIuS/oeaBrzEzLTIiLDFdLFsiMTA0NjIzIiwi5L+h5oGvMTQtMSIsMV0sWyIxMDQ2MjQiLCLkv6Hmga8xNC0yIiwxXSxbIjMwNjUiLCLlnLDnkIYo5biIKTEwLTEiLDFdLFsiMzA2NiIsIuWcsOeQhijluIgpMTAtMiIsMV0sWyIzMDY5Iiwi5pWZ6IKy5oqA5pyvMTAtMSIsMV0sWyIzMDcwIiwi5pWZ6IKy5oqA5pyvMTAtMiIsMV0sWyIzMDU5Iiwi5pWw5a2mKOW4iCkxMC0xIiwxXSxbIjYwMDgiLCLmlbDlraYo5biIKTEwLTMgICAgICAiLDFdLFsiMzA2MCIsIuaVsOWtpjEwLTIiLDFdLFsiMzA2NyIsIueJqeeQhijluIgpMTAtMSIsMV0sWyIzMDY4Iiwi54mp55CGMTAtMiIsMV0sWyIzMDYxIiwi5L+h5oGvMTAtMSIsMV0sWyIzMDYyIiwi5L+h5oGvMTAtMiIsMV0sWyIzMDYzIiwi5L+h5oGvMTAtMyIsMV0sWyIzMDY0Iiwi5L+h5oGvMTAtNCIsMV1dLCJTZWxlY3RlZFZhbHVlIjoiNTEwMCJ9LCJHcmlkMSI6eyJUaXRsZSI6IuaVmeWtpuaOiOivvuS/oeaBr+ihqCA8c3BhbiBzdHlsZT0nY29sb3I6cmVkOyc+77yI5p+l6K+i54+t57qn77ya5L+h5oGvMTItMe+8iTwvc3Bhbj4iLCJSZWNvcmRDb3VudCI6MTUsIlhfUm93cyI6eyJWYWx1ZXMiOltbIuiuoeeul+acuue7hOaIkOamguiuuu+8iDMqMTbvvIkiLCLlkajkuIAgMeOAgTLoioIiLCLkuozmlZlCLTMwOCIsIuWtn+S6mui+iSAgICAgICAgICAgICAgICJdLFsiKui9r+S7tuW3peeoiyjlrp7pqowp77yIMTYo5LiK5py6Ke+8iSIsIuWRqOS4gCAz44CBNOiKgiIsIueQhuWtpumZouWunumqjOWupC4iLCLlrZ/kuprovokgICAgICAgICAgICAgICAiXSxbIuaVmeiCsui9r+S7tuW3peeoi++8iDIqMTUrMTgo5a6e6aqMKS/kv6Hmga8xNisxNijlrp7pqowp77yJIiwi5ZGo5LiAIDnjgIExMOiKgiIsIuS6jOaVmUItMzA4Iiwi5a2f5Lqa6L6JICAgICAgICAgICAgICAgIl0sWyIq6K6h6YeP57uP5rWO5a2m77yIMTYrMTbvvIjkuIrmnLrvvInvvJ0yKjE277yJIiwi5ZGo5LqMIDHjgIEy6IqCIiwi5LqM5pWZQi03MDIiLCLkvI3mgJ3mlY8gICAgICAgICAgICAgICAiXSxbIui/kOetueWtpu+8iDQqMTYs5pWw5a2mMTItMTozKjE277yJIiwi5ZGo5LqMIDPjgIE06IqCIiwi6KW/MTA0Iiwi546L5LiW5Y2OICAgICAgICAgICAgICAgIl0sWyLnjrDku6PorqHnrpfmlrnms5XvvIgyKjE2KzE2KOWunumqjCnvvIkiLCLlkajkuowgNeOAgTboioIiLCLkuozmlZlCLTMwOCIsIueOi+S4luWNjiAgICAgICAgICAgICAgICJdLFsiKui9r+S7tua1i+ivleaKgOacr++8iDE2KzE2KOWunumqjCnvvIkiLCLlkajkuIkgMeOAgTLoioIiLCLkuozmlZlCLTcwMiIsIuaigeWbveS4miAgICAgICAgICAgICAgICJdLFsiKirorqHph4/nu4/mtY7lrabvvIjkuIrmnLrvvInvvIgxNu+8iSIsIuWRqOS4iSAz44CBNOiKgiIsIueQhuWtpumZouWunumqjOWupC4iLCLkvI3mgJ3mlY8gICAgICAgICAgICAgICAiXSxbIioq6K6h566X5py657uE5oiQ5qaC6K6677yIMyoxNu+8iSIsIuWRqOS4iSA144CBNuiKgiIsIuS6jOaVmUItMzA4Iiwi5a2f5Lqa6L6JICAgICAgICAgICAgICAgIl0sWyLkv6Hmga/np5Hlrabln7rnoYDvvIgyKjE277yJIiwi5ZGo5LiJIDfjgIE46IqCIiwi5LqM5pWZQi0zMDgiLCLnjovkuJbljY4gICAgICAgICAgICAgICAiXSxbIuWkp+WtpueUn+WwseS4muaMh+WvvO+8iDIqMTDvvIkiLCLlkajlm5sgM+OAgTToioIiLCLkuJw2MDQiLCLkvZXlu7rkuJwgICAgICAgICAgICAgICAiXSxbIioq546w5Luj6K6h566X5pa55rOV77yI5a6e6aqM77yJ77yIMTYo5a6e6aqMKe+8iSIsIuWRqOWbmyA144CBNuiKgiIsIueQhuWtpumZouWunumqjOWupC4iLCLnjovkuJbljY4gICAgICAgICAgICAgICAiXSxbIui/kOetueWtpu+8iDQqMTYs5pWw5a2mMTItMTozKjE277yJIiwi5ZGo5ZubIDfjgIE46IqCIiwi6KW/MTA0Iiwi546L5LiW5Y2OICAgICAgICAgICAgICAgIl0sWyIqKui9r+S7tua1i+ivleaKgOacryjkuIrmnLop77yIMTYo5a6e6aqMKe+8iSIsIuWRqOWbmyA544CBMTDoioIiLCLnkIblrabpmaLlrp7pqozlrqQuIiwi5qKB5Zu95LiaICAgICAgICAgICAgICAgIl0sWyLmr5vms73kuJzmgJ3mg7PkuK3lm73nibnoibLmpoLorrrvvIgyKjE177yJIiwi5ZGo5LqUIDPjgIE06IqCIiwi5LqM5pWZQS0yMDUiLCLosKLlu7rkuK0gICAgICAgICAgICAgICAiXV0sIkRhdGFLZXlzIjpbW251bGxdLFtudWxsXSxbbnVsbF0sW251bGxdLFtudWxsXSxbbnVsbF0sW251bGxdLFtudWxsXSxbbnVsbF0sW251bGxdLFtudWxsXSxbbnVsbF0sW251bGxdLFtudWxsXSxbbnVsbF1dLCJTdGF0ZXMiOltbXSxbXSxbXSxbXSxbXSxbXSxbXSxbXSxbXSxbXSxbXSxbXSxbXSxbXSxbXV19fSwiR3JpZDIiOnsiVGl0bGUiOiLmlZnlrablkajov5vnqIvooaggPHNwYW4gc3R5bGU9J2NvbG9yOnJlZDsnPijogIPor5Xnp5Hnm67vvJrov5DnrbnlraYg5q+b5rO95Lic5oCd5oOz5Lit5Zu954m56Imy5qaC6K66IOS/oeaBr+enkeWtpuWfuuehgO+8iTwvc3Bhbj4iLCJSZWNvcmRDb3VudCI6MSwiWF9Sb3dzIjp7IlZhbHVlcyI6W1si4piGICAiLCLimIYgICIsIuKAlCAgIiwi4oCUICAiLCLigJQgICIsIuKAlCAgIiwi4oCUICAiLCLigJQgICIsIuKAlCAgIiwi4oCUICAiLCLigJQgICIsIuKAlCAgIiwi4oCUICAiLCLigJQgICIsIuKAlCAgIiwi4oCUICAiLCLigJQgICIsIuKAlCAgIiwi77yaICAiLCLiiJogICJdXSwiRGF0YUtleXMiOltbbnVsbF1dLCJTdGF0ZXMiOltbXV19fX0="));

		
		httppost.setEntity(new UrlEncodedFormEntity(params));
		HttpResponse httpresponse=httpclient.execute(httppost);
		
		if(HttpStatus.SC_OK==httpresponse.getStatusLine().getStatusCode()){
			HttpEntity entity=httpresponse.getEntity();
			
			System.out.println("!!!!!!!!!!!getCourses:entity="+entity);
			
			if(null!=entity){
				
				String courses=EntityUtils.toString(entity);
				int start=courses.indexOf("Values");
				start=courses.indexOf("[[",start);
				int end=courses.indexOf("]]",start)+2;
				
				courses=courses.substring(start,end);
				System.out.println("*****courses="+courses);
				
				return courses;
			}
		}
		
		return null;
	}
	
	/**
	 * 获取广石化教务系统里的个人成绩信息
	 * 这里使用Jsoup可以方便的获取到需要的数据,如果想了解更多Jsoup的内容,可以参考:http://www.open-open.com/jsoup/
	 * @param cookies
	 * @return
	 * @throws IOException
	 * @throws JSONException
	 */
	public static String getScores(Map<String,String>cookies) throws IOException, JSONException{
		
		Document doc=Jsoup.connect("http://218.15.22.136:3008/ChengJiChaXun.aspx")
		          .cookies(cookies)
		          .timeout(30000)
		          .get();
//System.out.println("doc="+doc.);
		String scores=doc.toString();
		int start=scores.indexOf("Values");
		start=scores.indexOf("[[", start);
		int end=scores.indexOf("]]", start)+2;
		
		scores=scores.substring(start, end);
//		System.out.println("scores="+scores);
		
//		parseScores(scores);
		
		return scores;
	}
	
	/**
	 * 解析以上获取到的成绩数据
	 * @param scores
	 * @return
	 * @throws JSONException
	 */
	public static List<JSONArray> parseScores(String scores) throws JSONException{
		
		JSONArray jarr=new JSONArray(scores);
//		JSONArray jarr1=jarr.getJSONArray(0);
//		System.out.println("***"+jarr1.get(0));
		
		List<JSONArray>scoresList=new ArrayList<JSONArray>();
		for(int i=0;i<jarr.length();i++){
			scoresList.add(jarr.getJSONArray(i));
		}
		return scoresList;
	}
	
	/**
	 * 获取茂名公交信息数据
	 * @return
	 * @throws IOException
	 */
	public static ArrayList<HashMap<String,String>> getBusLines() throws IOException{
		
		ArrayList<HashMap<String,String>>busList=new ArrayList<HashMap<String,String>>();
		
		//使用Jsoup获取茂名公交网页的数据
		Document doc=Jsoup.connect("http://www.mmbus.cn/xlcx.php").get();
		
		//使用Jsoup对网页上的数据进行解析
		Element eles=doc.select("table").get(7);
		eles.select(".fona010").remove();
		Elements trs=eles.select("tr");
		for(int i=0;i<trs.size();i+=2){
			Element tr=trs.get(i);
			Elements tds=tr.select("td");
			
			HashMap<String,String>item=new HashMap<String, String>();
			                                                         
			item.put("busNo",tds.get(1).text());
			
			StringBuffer buffer=new StringBuffer();
			buffer.append(tds.get(2).text())
			      .append("----->")
			      .append(tds.get(4).text())
			      .append("(")
			      .append(tds.get(3).text())
			      .append("--")
			      .append(tds.get(5).text())
			      .append(")");
			item.put("time0",buffer.toString());
			item.put("stops",tds.get(6).text());
			item.put("price",tds.get(8).text());
			
			tr=trs.get(i+1);
			tds=tr.select("td");
			
			buffer=new StringBuffer();
			buffer.append(tds.get(0).text())
			      .append("----->")
			      .append(tds.get(2).text())
			      .append("(")
			      .append(tds.get(1).text())
			      .append("--")
			      .append(tds.get(3).text())
			      .append(")");
			item.put("time1",buffer.toString());
			
			busList.add(item);
			
			System.out.println("***busList="+busList);
		}
		return busList;
	}
	
}
</span>

MainActivity:

<span style="font-size:18px;">package com.example.schoolservice;

import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

/**
 * 请在fetchData()方法里的Utils.getCookies("xxxxx", "xxxx");处填入你的教务系统的账号和密码
 * @author Administrator
 *
 */
public class MainActivity extends Activity {

	private Button getcourses,getscores,getbuses;
	private TextView txt;
	private String data;
	private Handler handler;
	private Map<String, String> cookies;
	private int flag=0;
	private static final int FLAG_COURSES=0;
	private static final int FLAG_SCORES=1;
	private static final int FLAG_BUSES=2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		getcourses=(Button) findViewById(R.id.getcourses);
		getscores=(Button) findViewById(R.id.getscores);
		getbuses=(Button) findViewById(R.id.getbuses);
		txt = (TextView) findViewById(R.id.txt);
		txt.setMovementMethod(ScrollingMovementMethod.getInstance());//设置TextView可以滚动

		OnClickListener clicker=new OnClickListener(){
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				int vid=v.getId();
				if(vid==R.id.getcourses)flag=FLAG_COURSES;
				else if(vid==R.id.getscores)flag=FLAG_SCORES;
				else flag=FLAG_BUSES;
				
				//不能在主线程上进行网络操作,所以新建一个线程进行操作
				new Thread() {
					public void run() {
						fetchData();
					}
				}.start();
			}
		};
		getcourses.setOnClickListener(clicker);
		getscores.setOnClickListener(clicker);
		getbuses.setOnClickListener(clicker);
		
		handler = new Handler();
	}
	
	/**
	 * 获取数据
	 */
	private void fetchData(){
		try {

			if(flag==FLAG_BUSES){//获取茂名公交数据
				data=Utils.getBusLines().toString();
				handler.post(updateView);//通知UI线程对界面进行更新
				return;
			}
			
			if (null == cookies) {//获取网页cookie
				cookies = Utils.getCookies("xxxxx", "xxxx");//请在此处填入广石化教务系统的账号和密码
				
				System.out.println("*******fetchData():cookies="+cookies);
			}

			if(flag==FLAG_COURSES){//获取课程数据
				System.out.println("******fetchData():start to get the courses");
				data=Utils.getCourses(cookies);
			}
			else if(flag==FLAG_SCORES){//获取成绩数据
				data=Utils.getScores(cookies);
				System.out.println("******fetchData():start to get the scores");
			}

			handler.post(updateView);//通知UI线程对界面进行更新

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//不能在子线程中刷新UI线程的界面,所以通过handler的post方法来提醒UI线程刷新界面
	private Runnable updateView=new Runnable() {
		@Override
		public void run() {
			// TODO Auto-generated method stub
			if(null!=data)txt.setText(data);
		}
	};
}</span>

最后,送上demo的下载地址:http://download.csdn.net/download/gsh_android_bar/8737723


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值