安卓我的课表

开学了,发现课程格子以及本校的XX助手不能使用了,只好自己简单实现了一个安卓的课表,虽然没有华丽的布局,没有清晰的周次,没有考试信息,但是总算知道上什么课以及在哪上课了。

首先,我是第一次做安卓的项目,之前只是搭建过一次环境,用了一个上午去网上找有关课表软件的代码,结果并不多,只是找到了一些教务处网站抓取课表的方法。过了一个上午依然毫无头绪,不知道从何写起。下午理了理思路,决定先写一个登陆教务处的功能,用的AsyncHttpClient,网上找的一个包Android-async-http-1.4.9,重新生成httpunit类,添加了post和get方法

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

import org.apache.http.Header;

import android.app.ProgressDialog;
import android.content.Context;
import android.widget.Toast;
  
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.BinaryHttpResponseHandler;
import com.loopj.android.http.RequestParams;

public class HttpUtil {
	private	static AsyncHttpClient client = new AsyncHttpClient();
	
	//静态初始化
	static{
		client.setTimeout(10000);  //设置请求等待时间
	}
	public static void post(String urlString, RequestParams params, AsyncHttpResponseHandler res)  //参数:目标地址,参数列表,返回数据
	{
		client.post(urlString, params, res);
	}
	public static void get(String urlString, AsyncHttpResponseHandler res)
	{
		client.get(urlString, res);
	}

}
</span>

然后利用抓包工具查看了登陆教务处的post数据,还好我校教务处没有验证码以及各种奇怪的数据,只有用户名和密码,加入参数列表,调用post

<span style="font-family:KaiTi_GB2312;font-size:18px;">HttpUtil.post(urlAPI, params, new AsyncHttpResponseHandler() {
			@Override
			public void onSuccess(int arg0, cz.msebera.android.httpclient.Header[] arg1, byte[] arg2) {
				// TODO 自动生成的方法存根
				try{
					String resultContent = new String(arg2, "gb2312");
					if(isLogin(resultContent))
					{
						Log.d("TAG", "login success");
						SharedPreferences mySharedPreferences = getSharedPreferences("class", MODE_PRIVATE);  //打开本地数据文件
						SharedPreferences.Editor editor = mySharedPreferences.edit();   //设置编辑器
						editor.putString("isLogin", "1");                                //添加登录标志
						Toast.makeText(getApplicationContext(), "登陆成功", Toast.LENGTH_SHORT).show();
						jumpToClassActivity();
						editor.commit();
					}
					else
					{
						Toast.makeText(getApplicationContext(), "用户名或者密码错误", Toast.LENGTH_SHORT).show();
					}
				}catch(UnsupportedEncodingException e)
				{
					e.printStackTrace();
				}
			}
			
			@Override
			public void onFailure(int arg0, cz.msebera.android.httpclient.Header[] arg1, byte[] arg2, Throwable arg3) {
				// TODO 自动生成的方法存根
				Toast.makeText(getApplicationContext(), "连接失败", Toast.LENGTH_SHORT).show();
			}
			
		});</span>

用自己手机调试,输入用户名和密码之后好久一直没反应,后来发现原来是我把post的时间设置的太长了,并且没有等到十秒就结束了进程,而且本校教务处用外网是登不上的,后来用校内无线网才登上。这里又有一个问题,本校教务处网站的html代码实在晦涩,而且post的返回数据只有一个框架,判断是否登录成功的代码就是判断是否存在一个表格框架。

<span style="font-family:KaiTi_GB2312;font-size:18px;">public boolean isLogin(String resultContent)
	{
		Document doc = Jsoup.parse(resultContent, "UTF-8");
		Elements elements = doc.select("frameset");
		if(elements.isEmpty())
		{
			return false;
		}
		else
		{
			return true;
		}
	}</span>

第一天结束。

第二天,教务处网站获取课表,get方法,并且是无参数的get方法

<span style="font-family:KaiTi_GB2312;font-size:18px;">public void getClass(View view){
		HttpUtil.get(url, new AsyncHttpResponseHandler() {
			
			@Override
			public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
				// TODO 自动生成的方法存根
				try {
					String result = new String(arg2, "gb2312");
					setClass(result);
				} catch (UnsupportedEncodingException e) {
					// TODO 自动生成的 catch 块
					e.printStackTrace();
				}
			}
			
			@Override
			public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
				// TODO 自动生成的方法存根
				
			}
		});</span>

由于本人自己使用,所以就少写了很多函数,布局也是简单的设置了20个textview,每次获取到一节课的信息就写进textview。

最后一点,保存登录状态以及课表信息。用的SharedPreference,在本地创建一个类似xml的文件,每次向其中添加结点以及获取结点的值,我设置了一个是否登录的标志以及每节课的信息,都保存在了文件里,每次打开程序先检查是否登录,若已经登录转到课表界面,打开课表界面的时候先检查是否保存了课表,若有就直接显示。最后还少一个注销的功能,需要再post一下教务处网站,然后清除本地文件的内容。由于本人需要的功能都已经实现,所以注销也就没写。。。。

所添加的包:,一个是用来对html语言进行操作的,获取其中的结点和结点内容什么的,一个是发起异步http请求,一个就是所依赖的包。

布局很烂,仅限个人使用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值