
本来弄好了一张gif图来演示的,但是上传之后在草稿箱那里没能看到动态图的效果,今年才写的博客,所以很多博客的东西不熟悉,以后慢慢再学了。。
下面是内容:
1.首先大家都看到效果图是有登录界面的吧,我分享给大家的是没有登录界面的,因为我是通过Android程序登录到我们学校的教务系统,然后抓取一些我要的数据,里面一些信息就不透露了哈,不过实现原理还是会说下的。。。
原理:首先是通过HttpClient访问我们学校教务系统的网站,然后通过post一些教务系统需要的参数,有些朋友可能不清楚如何获这些参数,这里我是用HttpWatch来获取所需要post过去的参数的,如果不知道httpWatch是什么或者怎么用,建议还是学下,这东西以后用的概率应该很大才对,当然了,这是作为学生角度的个人看法,如果你有更好的方法,那就希望你告诉我下,让我也好好学习一下 ^_^ ... 还有关于HttpClient的使用,不熟悉的朋友可以去看我写的一篇关于HttpClient的使用,以前通过HttpClient试着写过《自动登录》,然后成功登录了一些网站,所以会使用HttpClient的话,想要进入自己学校的教务系统并抓取数据也不是难事哦。。
HttpClient的使用
好了,继续回归话题,httpClietn成功访问之后返回网站的html文档,接下来的工作就是对html文档进行解析,从而获取你要的数据,这里有两种方法:
(一)通过StringTokenizer类来分割字符串,关于这个类应该很多朋友还是没见过吧,有兴趣的可以去学下,看下这个API的使用
(二)通过很流行的Jsoup解析html,Jsoup是一个很不错的html解析工具,我觉得这个以后用到的概率也是非常高的(个人感觉)
我获取的是我这学期有关课表的数据,不要纠结我怎么是这些课程,哈哈,因为我是一名机械自动化的机电男呗。
好了,关于原理就介绍到这,把登录的模块减掉之后呢,我把这个课表项目所需要的数据存在SharedPreference跟SQLite里面,这两个文件我会上传,在学习的时候直接导到eclipse的模拟器上就行了,看图导入红框里面的文件便是。

好了,再写文字就要被吐槽了吧,还不上代码,我这就贴了:
首先是LoginActivity.java
[mw_shl_code=java,true]public class LoginActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
// 通过读取sp中的user_name字段来判断用户是否已经登录过,如果登录过则直接进入课表界面
if (!Util.readSharedPreference(LoginActivity.this, "jwinfo", "user_name").equals("")) {
Intent kbIntent = new Intent(LoginActivity.this, TimeTableActivity.class);
startActivity(kbIntent);
finish();
}
}
}[/mw_shl_code]
因为是去掉了登录教务系统跟抓取、解析数据的模块,所以这个代码就减成这个直接读取SharedPreference的数据来绕过登录了。。
接着是课表的Activity---TimeTableActivity.java
首先先回顾下效果图2的界面,这种界面的实现方法有很多种,我就说下我使用的方法吧。。。
ViewGroup+ViewPager+ListView
(一)ViewGroup:用这控件来做indicator,也是是界面上面的tab
(二)ViewPager:其实每个显示课表的界面就是一个ListView,而这个ViewPager就是这7个ListView的容器
(三)ListView:这个不解释了哈
不熟悉使用ViewGroup+ViewPager的朋友,还是建议看下我的这篇使用工具,因为如果你不熟悉的话,看这个TimeTableActivity.java真心会累觉不爱,而看懂了之后,你会发现,根本就是把这个东西ctrl+c+v弄过来的,学东西本来就像堆积木,小块的积木知道怎么拼了,就不怕拼不出你想要的效果啦。
ViewGroup+ViewPager的使用方法
TimeTableActivity.java我就贴部分代码了,因为里面的代码基本就在上面的博客中写过[mw_shl_code=java,true]public class TimeTableActivity extends Activity {
private List<View> mListView;
private ViewPager pager;
private TextView imageView;
private TextView[] imageViews;
private ViewGroup group;
private String[] days = { "周一", "周二", "周三", "周四", "周五", "周六", "周日" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_time_table);
mListView = new ArrayList<View>();
TimeTableView view1 = new TimeTableView(TimeTableActivity.this, "一");
TimeTableView view2 = new TimeTableView(TimeTableActivity.this, "二");
TimeTableView view3 = new TimeTableView(TimeTableActivity.this, "三");
TimeTableView view4 = new TimeTableView(TimeTableActivity.this, "四");
TimeTableView view5 = new TimeTableView(TimeTableActivity.this, "五");
TimeTableView view6 = new TimeTableView(TimeTableActivity.this, "六");
TimeTableView view7 = new TimeTableView(TimeTableActivity.this, "日");
mListView.add(view1.getView());
mListView.add(view2.getView());
mListView.add(view3.getView());
mListView.add(view4.getView());
mListView.add(view5.getView());
mListView.add(view6.getView());
mListView.add(view7.getView());
pager = (ViewPager) findViewById(R.id.kbViewPager);
pager.setAdapter(new MyPagerAdapter(mListView));
imageViews = new TextView[mListView.size()];
group = (ViewGroup) findViewById(R.id.viewGroup);
Time time = new Time();
time.setToNow();
int currentDay;
if (time.weekDay == 0) {
currentDay = 6;
} else {
currentDay = time.weekDay;
}
pager.setCurrentItem(currentDay - 1);
for (int i = 0; i < mListView.size(); i++) {
imageView = new TextView(TimeTableActivity.this);
imageView.setLayoutParams(new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 1.0f));
imageView.setGravity(Gravity.CENTER);
imageViews = imageView;
imageViews.setText(days.substring(1, 2));
imageViews.setBackgroundResource(R.drawable.daytitle_nochoice_bg);
imageViews.setTextColor(0xff858585);
if (i == currentDay - 1) {
System.out.println("currentDay>>" + currentDay);
// 根据当天的时间,默认选中的第一张图片
imageViews.setBackgroundResource(R.drawable.daytitle_bg);
imageViews.setTextColor(0xff000000);
}
final int currentIndex = i;
imageViews.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
pager.setCurrentItem(currentIndex);
}
});
group.addView(imageViews);
}
pager.setOnPageChang