安卓我的课表
来源:互联网 发布:ubuntu 16.04 ip设置 编辑:程序博客网 时间:2024/05/01 13:22
开学了,发现课程格子以及本校的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 {privatestatic 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() {@Overridepublic 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();}}@Overridepublic 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() {@Overridepublic 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();}}@Overridepublic void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {// TODO 自动生成的方法存根}});</span>
由于本人自己使用,所以就少写了很多函数,布局也是简单的设置了20个textview,每次获取到一节课的信息就写进textview。
最后一点,保存登录状态以及课表信息。用的SharedPreference,在本地创建一个类似xml的文件,每次向其中添加结点以及获取结点的值,我设置了一个是否登录的标志以及每节课的信息,都保存在了文件里,每次打开程序先检查是否登录,若已经登录转到课表界面,打开课表界面的时候先检查是否保存了课表,若有就直接显示。最后还少一个注销的功能,需要再post一下教务处网站,然后清除本地文件的内容。由于本人需要的功能都已经实现,所以注销也就没写。。。。
所添加的包:,一个是用来对html语言进行操作的,获取其中的结点和结点内容什么的,一个是发起异步http请求,一个就是所依赖的包。
布局很烂,仅限个人使用。
0 0
- 安卓我的课表
- 【android课表】一个简单的安卓课表软件
- 我的课表
- 发一份我的课表
- 我的智能小课表
- 我的安卓
- 我的瑜伽课表:第一阶段课程(共8节课)
- 我的瑜伽课表:第二阶段课程(共8节课)
- 我的课表—android 表格布局应用
- 我的安卓博客
- 我的安卓新天地
- 课表拖放的实现
- 传智播客的培训课表
- 课表
- 课表
- 课表
- jQuery easyUI动态的课表
- 漂亮的课表控件-TimetableView
- 2016-3-14恬淡努力的一天
- repeater用法一步一步详讲,用来绑定和显示数据信息
- Python学习笔记——文件
- 用MapReduce实现矩阵乘法
- C#调用C库的注意事项
- 安卓我的课表
- 数据库SQL优化大总结之 百万级数据库优化方案
- 贪心算法(上)
- YTU:复制字符串
- ViewPager 详解(三)---PagerTabStrip与PagerTitleStrip添加标题栏的异同
- 浅谈MySQL存储引擎选择 InnoDB还是MyISAM
- iOS颜色渐变
- hdu3789/九度OJ1007 奥运排序问题
- 推广必须要做的9种方法【SEO】