基于android课程表怎么获取课表
开发过程
一开始因为毕设有关课程表的要求不明,主要就是利用jsoup拉取学校教务管理系统的课程数据进行课程表界面的填充显示,并不能课程的个性化调整。
后来重新调整了需求,参考了超级课程表的功能。重新设计了实体类,利用bmob移动端云作为爬取到的数据的数据服务器进行了重新的开发。
主要代码
1、课程实体类
package commanguescoursemanagementbean;
import javaioSerializable;
import javautilArrayList;
import javautilregexMatcher;
import javautilregexPattern;
import cnbmobv3BmobObject;
public class CourseBean extends BmobObject implements Serializable {
public static final String TAG = "CourseBean";
private String studentId;
private String dataYear;
private String dataTerm;
private String courseName = ""; //课程名
private String courseRoom = ""; //教室
private String courseTeacher = ""; //老师
//private String courseWeekNumber = "0";
private ArrayList<Integer> courseWeekNumber = new ArrayList<>(); //周数
private int courseWeek = 0; //星期几上课
private int courseLow = 0; //第几排
private int courseSection = 0; //延续几节课
//private String courseSection = "12"; //第几节上课1,2,12(2节课)
//private String courseIn = "3"; //单双周 1(单),2(双),3(全)
public CourseBean() {
super();
}
public void setCourseBase(String studentId, String dataYear, String dataTerm) {
thisstudentId = studentId;
thisdataYear = dataYear;
thisdataTerm = dataTerm;
}
public CourseBean(String courseName, String courseRoom, String courseTeacher, ArrayList<Integer> courseWeekNumber, int courseWeek, int courseLow, int courseSection) {
thiscourseName = courseName;
thiscourseRoom = courseRoom;
thiscourseTeacher = courseTeacher;
thiscourseWeekNumber = courseWeekNumber;
thiscourseWeek = courseWeek;
thiscourseLow = courseLow;
thiscourseSection = courseSection;
}
/
str 数据到bean
@Name: stringToBean
@param str
@return
@Time: 2015-12-21 上午11:00:57
@Return: CourseBean
/
public static CourseBean stringToBean(String str) {
return toBean(str);
}
//辅助
private static CourseBean toBean(String courseDatas){
CourseBean bean = null;
String[] courseData = courseDatassplit("◇");
if(courseDatalength>3){ //有数据
bean = new CourseBean();
String courseName = courseData[0];
String courseRoom = courseData[2];
//获取上课周数
findWeekNumberFromStr(courseData[1],bean);
beansetCourseName(courseName);
beansetCourseRoom(courseRoom);
findCourseInFromStr(courseData[4],bean);
}
return bean;
}
/
找出上课周数,老师名字
@Name: findFromStr
@return
@Time: 2015-12-21 上午11:22:30
@Return: String
/
public static void findWeekNumberFromStr(String courseData,CourseBean bean){
Pattern pattern = Patterncompile("(\\w)\\((\\d+)-(\\d+)\\)");
Matcher matcher = patternmatcher(courseData);
if(matcherfind()){
String teacher = matchergroup(1);
beansetCourseTeacher(teacher);
String weekNumberstart = matchergroup(2);
String weekNumberfinish = matchergroup(3);
Integer weekNumberstartInt = IntegerparseInt(weekNumberstart);
Integer weekNumberfinishInt = IntegerparseInt(weekNumberfinish);
for (int i = weekNumberstartInt;i<=weekNumberfinishInt;i++){
beangetCourseWeekNumber()add(i);
}
}
}
/
找出 上课是不是单双周,几节课
@Name: findCourseInFromStr
@param courseData
@return
@Time: 2015-12-21 下午1:29:05
@Return: String
/
public static void findCourseInFromStr(String courseData,CourseBean bean){
Pattern pattern = Patterncompile("(\\w)\\{(\\d)节\\}");
Matcher matcher = patternmatcher(courseData);
if(matcherfind()){
String str = matchergroup(1);
ArrayList<Integer> list = beangetCourseWeekNumber();
switch (str) {
case "单周":
for (int i = 0;i< listsize();i++){
Integer weekNumber = listget(i);
if (weekNumber%2==0){ //移除偶数
beangetCourseWeekNumber()remove(i);
}
}
break;
case "双周":
for (int i = 0;i< listsize();i++){
Integer weekNumber = listget(i);
if (weekNumber%2!=0){ //移除奇数
beangetCourseWeekNumber()remove(i);
}
}
break;
default:
break;
}
String str2 = matchergroup(2);
String[] args = str2split("");
if (argslength==3){
Integer integer = IntegerparseInt(args[1]);
Integer integer2 = IntegerparseInt(args[2]);
beansetCourseLow(integer);
beansetCourseSection(integer2-integer+1);
}else if (argslength==4){
Integer integer = IntegerparseInt(args[1]);
Integer integer2 = IntegerparseInt(args[2]+args[3]);
beansetCourseLow(integer);
beansetCourseSection(integer2-integer+1);
}else if (argslength==5){
Integer integer = IntegerparseInt(args[1]+args[2]);
Integer integer2 = IntegerparseInt(args[3]+args[4]);
beansetCourseLow(integer);
beansetCourseSection(integer2-integer+1);
}else if (argslength==2){
Integer integer = IntegerparseInt(args[1]);
beansetCourseLow(integer);
beansetCourseSection(1);
}
}
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
thiscourseName = courseName;
}
public String getCourseRoom() {
return courseRoom;
}
public void setCourseRoom(String courseRoom) {
thiscourseRoom = courseRoom;
}
public String getCourseTeacher() {
return courseTeacher;
}
public void setCourseTeacher(String courseTeacher) {
thiscourseTeacher = courseTeacher;
}
public ArrayList<Integer> getCourseWeekNumber() {
return courseWeekNumber;
}
public void setCourseWeekNumber(ArrayList<Integer> courseWeekNumber) {
thiscourseWeekNumber = courseWeekNumber;
}
public int getCourseWeek() {
return courseWeek;
}
public void setCourseWeek(int courseWeek) {
thiscourseWeek = courseWeek;
}
public int getCourseLow() {
return courseLow;
}
public void setCourseLow(int courseLow) {
thiscourseLow = courseLow;
}
public int getCourseSection() {
return courseSection;
}
public void setCourseSection(int courseSection) {
thiscourseSection = courseSection;
}
public String getStudentId() {
return studentId;
}
public void setStudentId(String studentId) {
thisstudentId = studentId;
}
public String getDataYear() {
return dataYear;
}
public void setDataYear(String dataYear) {
thisdataYear = dataYear;
}
public String getDataTerm() {
return dataTerm;
}
public void setDataTerm(String dataTerm) {
thisdataTerm = dataTerm;
}
}
2、课程归类处理
//按天查询数据
private void getDayDate(List<CourseBean> list){
boolean boo = SaveUtilgetSharedPreferencesSwitch(mContext);
ArrayList<CourseBean> integerA = new ArrayList<>();
if (boo){
if (weekNum!=-1){
for (int l=0;l<listsize();l++){ //去除
ArrayList<Integer> integerArrayList = listget(l)getCourseWeekNumber();
if (!integerArrayListcontains(weekNum)){ //不包含,就是不是本周,去除
integerAadd(listget(l));
}
}
listremoveAll(integerA);
}
}
List<CourseBean> list1 = null;
Map<Integer,List<CourseBean>> map = new HashMap<>();
for (CourseBean be :list) {
Integer weekNum = begetCourseWeek();
if (mapcontainsKey(weekNum)){ //有数据
list1 = mapget(weekNum);
}else {
list1 = new ArrayList<>();
mapput(weekNum,list1);
}
list1add(be);
}
ArrayList<CourseBeanMap> ls = new ArrayList<>();
//按星期几处理
for (MapEntry<Integer,List<CourseBean>> entry : mapentrySet()) {
List<CourseBeanMap> mapw = handleRepeat(entrygetValue(),entrygetKey());
lsaddAll(mapw);
}
//本地存储存储使用
TimeTableBmob bmob = new TimeTableBmob();
bmobsetStudentId(CourseApplicationgetInstance()getUserInfo()getStudentId());
bmobsetCourseList(ls);
bmobsetTerm(dataTerm);
bmobsetYear(dataYear);
CourseApplicationgetInstance()setTimeTableBmob(bmob);
dataBackonDataBack(ls);
}
//处理重复
private List<CourseBeanMap> handleRepeat(List<CourseBean> list,Integer weekNum){
Collectionssort(list,new Comparator<CourseBean>(){
public int compare(CourseBean arg0, CourseBean arg1) {
Integer year1 = arg0getCourseLow();
Integer year2 = arg1getCourseLow();
return year1compareTo(year2);
}
});
List<CourseBeanMap> listKey = new ArrayList<>();
List<String> liststr = new ArrayList<>();
int size = listsize();
for (int h=0;h<listsize();h++){
CourseBean bean = listget(h);
Integer low = beangetCourseLow();
Integer sesson = beangetCourseSection();
Boolean isAdd = false;
解压和储存的区别
《Bmob》是一个可以开发云存储的移动应用软件
它可以让移动开发者将信息从服务器直接推送到应用程序中,从而实现软件的主动更新、信息通知等服务。
自己开发一款APP需要多长时间
如今,不少企业都想拥有属于自己企业或产品的手机APP,但其中最困扰企业主的问题就是:开发一款手机APP到底需要多少钱?
简单点来说,要视手机APP的需求及质量而言,价位一般在几千到十几万左右,更高端的价格更高。
今天,我们就来详细分析一下这个问题,请继续往下看吧。
一、APP开发款式分为固定款和定制款,两者的价格均不相同
固定款:是指直接套用已有的、现成的APP固定模板,报价是固定的,所需要的功能也是固定的,缺点就是客户拿不到源代码,也不能根据企业需求进行定制,由于源代码是封装的,如果企业以后想进行功能升级或系统维护的话,也不能够实现,只能重新开发一个新的软件。
固定款的APP开发时间短,约2~3日的时间即可完成,费用大约在几千到几万之间。
定制款:定制款是指APP的功能全部重新开发,过程比较繁琐,需要美工、策划、APP开发(前台/客户端/手机端)、后台程序员等工种协同完成,大型的、功能复杂的APP甚至需要数十人的团队。
由于APP的功能和设计都是定制的,因此价格会高些。定制款的开发时间与开发价格是成正比的,开发时间长,大约在两三个月甚至不定的周期里才能完成,而费用大概在几万甚至十几万左右。
因此,想要知道开发一款手机APP需要花费多少钱,企业主首先必须把APP的详细需求和功能告知APP开发公司,开发公司才能报出一个合理的价格。
二、手机APP平台不同,制作成本也不一样
现在市面上流行的手机APP制作平台主要有两种一般包括两种系统:安卓系统(Android)和苹果系统(IOS)。
一般来说,制作苹果系统的手机APP软件费用要比安卓平台的贵一些,因为苹果公司对苹果平台的封闭性和手机APP开发语言Objective-C的难度,都让APP开发者加大了苹果系统手机APP开发的难度。
三、APP制作成本包含参与人员的工资
通常情况下,开发一款APP需要产品经理、客户端工程师、后端工程师和UI设计师各一名,这已经是制作手机APP应用软件比较精简的配置了,所以这些参与人员的工资也是包含在APP制作成本当中的。这些工作人员的月薪加起来可能都会超过4、5万元。
四、APP开发公司的所在地
需要注意的是,同样实力的APP开发公司,在不同的城市也会导致APP的成本费用高一些
接入第三方就可以实现消息推送。好的推送 提供通知+自定义消息+富媒体三重个性化推送方式,满足任意场景需要,好的推送 3分钟快捷集成SDK,推送毫秒级送达,降低开发成本,同时有效提升用户留存率。
极光推送值得信赖,极光推送是国内最早的第三方移动消息推送服务供应商,累计为超过150万移动应用提供服务极光推送 系统性能稳定,送达率高,延迟率低还支持用户分群的推送功能。
可定制的私有云,对于定制化需求较强的,或者想拥有自己推送平台的开发者,极光提供全功能的私有云方案。
JPush 支持推送数量、用户打开次数、用户使用时长、新增用户、活跃用户等数据的统计。 Android 开发者需要实现了相关的统计 API,才可以进行用户相关的统计。 iOS 开发者不需要实现统计 API,可以直接在控制台-统计页面查看相关数据。
直接选择一个baas平台,例如bmob后端云,都不需要自己去租服务器。几乎免去服务端的工作量,分分钟为你的APP添加一个强大的后端服务系统,为你提供一整套完整的后端解决方案,建议把盈利模式也考虑进去,接入支付sdk,搞几个场景支付,打赏什么的功能,盈利也有了。最主要的是省去搭建后台的时间,就是省去了最麻烦的部分。这样看,如果资金紧张,技术人员只需要客户端开发人员即可,
网络电话系统开发的话,首先要知道网络电话的原理。其实网络电话也是要租三大运营商的线路的。那么租了就会有接口。通过编程就可以接通这个接口。实现通话。
通常网络电话的拨打方式有两种:
第一种就是:直拨,那么直拨的话就是像平时打电话一样的。
第二种就是:回拨。回拨的话就是主叫在拨打电话给被叫的话。就发送一个信号给服务器。那么服务器就同时向主叫和被叫同时发送一个信号。等双方都接通后就可以正常通电话了。
在这个系统的基础上,蜂云智能 还把三级分销系统和红包秒到系统内置在这个网络电话里面。所以更加的强大。
0条评论