平时去自习的话,经常发现坐还没一个小时,发现这个班要上课,踮手踮脚地去找下一间。如果有个应用,掏出手机就能看到,全天都空的自习教室、全上午都没课的教室、全下午都没课的教室,该多好。于是,应用诞生了。features有:
1)根据教务处信息,提供北京林业大学最新的空课室信息。
2)提供空课室列表,分全上午没课,全下午没课,晚上没课课室列表。
3)根据当前时间,智能推荐课室,比如下午1点,显示的全下午没课的课室。
4)楼层低的课室排在列表前面。
简略总结一下开发这个应用学到的一些知识。总结对自己最有好处,如果能帮助别人那更好。
首先,教务处网站提供了空课室信息,如图。
折腾了两天后,就是上面那幅图的样子。
一开始抓取用的是字符串的基本处理方法,先把所有数字得到,然后因为课室号都是三位数字的,然后舍去前面一些,就搞到了。
怎样得到从字符串得到所有的数字呢?
像这样。
输入:782sjfk2382kjfsdlkfj382"[^0-9]+"是正则表达式,[^0-9],表示匹配一个除了0到9的字符,+表示匹配前面的表达式一次或多次。看图就一下子明白了。
所以之后的split,分隔字符串,就得到数字的字符串数组。尤其值得一提的是这个“+”,因为网页里,非数字字符特别多。
所以,上面的判断的语句没什么必要,即if判断可省略:
这里的print也有一点神奇:
...表示不定长参数。作为从Lisp刚转过来学Android的人,对这个就感觉特别亲切。java语言的一大制订者Guy Steele精通很多门语言,也是Common Lisp的语言制订者。Lisp中:
只要用一个&rest就行了。还有&optional参数,让某个参数是可选的。&key让某个参数成为关键字。&rest经常和Macro结合来用。
后来学聪明了,用起了jsoup,加入Android的时候,要这样:
放到libs文件夹下,再刷新一下。下面方式很出错,
说是什么api更新后这样做不会自动把jsoup包囊括进来。
看这个html:
想获得所有的文本,可以用:
一些代码片段:
其中,src.attr("abs:src"),表明获得src的绝对地址。而上面src="y18.gif",是相对地址。
上面片段改编自这里。
自定义标题及标题栏视图:
判断是否联网:
日期加法函数:
计算相隔的天数:
得到网页内容:
使用bundle在Activity中传递数据:
使用spinner:
SharedPreferences:
在另外一个Activiy中:
更新ListView:
总的来说,判断内容更新+jsoup网页抓取+Spinner+ListView。
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。