package com.myqsc.mobile2.exam.uti; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.json.JSONArray; import android.annotation.SuppressLint; import android.content.Context; import com.myqsc.mobile2.network.DataUpdater; import com.myqsc.mobile2.uti.Utility; @SuppressLint("NewApi") public class ExamDataHelper { Context mContext = null; public ExamDataHelper(Context context) { this.mContext = context; } List<ExamStructure> allExamList = null; char whichTerm = 0x0; public List<ExamStructure> getExamList(final char term){ if (allExamList != null && whichTerm == term) return allExamList; whichTerm = term; String result = mContext.getSharedPreferences(Utility.PREFERENCE, 0) .getString(DataUpdater.JW_KAOSHI, null); allExamList = new ArrayList<ExamStructure>(); try { JSONArray jsonArray = new JSONArray(result); for(int i = 0; i != jsonArray.length(); ++i) { ExamStructure examStructure = new ExamStructure(jsonArray.optJSONObject(i)); if (term == 0x0) allExamList.add(examStructure); if (term == '春' || term == '秋') { //春、秋学期仅仅显示相等的 if (examStructure.term.length() == 1 && examStructure.term.indexOf(term) != -1) allExamList.add(examStructure); } if (term == '冬' || term == '夏') { //冬、夏学期显示包括长学期的课程 if (examStructure.term.indexOf(term) != -1) allExamList.add(examStructure); } } return allExamList; } catch (Exception e) { e.printStackTrace(); } return allExamList; } List<ExamStructure> todayExamList = null; int whichDay = 0; /** * 获取每天的课表(带缓存) * @param calendar * @return */ public List<ExamStructure> getTodayExamList(Calendar calendar) { if (whichDay == calendar.get(Calendar.DAY_OF_YEAR) && todayExamList != null) return todayExamList; whichDay = calendar.get(Calendar.DAY_OF_YEAR); todayExamList = new ArrayList<ExamStructure>(); List<ExamStructure> list = getExamList((char) 0x0); for (ExamStructure structure : list) { if (structure.isToday(calendar)) { todayExamList.add(structure); } } return todayExamList; } List<ExamStructure> day30ExamList = null; int future30Day = 0; private List<ExamStructure> get30DayExamList(Calendar calendar) { if (future30Day == calendar.get(Calendar.DAY_OF_YEAR) && day30ExamList != null) return day30ExamList; future30Day = calendar.get(Calendar.DAY_OF_YEAR); day30ExamList = new ArrayList<ExamStructure>(); for (ExamStructure structure : getExamList((char) 0x0)) { Calendar examCalendar = structure.getStartTime(); if (examCalendar == null) continue; // LogHelper.d(examCalendar.toString()); if ((int) ((examCalendar.getTimeInMillis() - calendar.getTimeInMillis()) / 1000 / 60 / 60 / 24) < 30 && examCalendar.compareTo(calendar) > 0) { day30ExamList.add(structure); } } Collections.sort(day30ExamList, new Comparator<ExamStructure>() { @Override public int compare(ExamStructure examStructure, ExamStructure examStructure2) { Calendar calendar1 = examStructure.getStartTime(); Calendar calendar2 = examStructure2.getStartTime(); if (calendar1 == null || calendar2 == null) return 0; return calendar1.compareTo(calendar2); } }); return day30ExamList; } public ExamStructure getCardExamStructure(Calendar calendar) { day30ExamList = get30DayExamList(calendar); // LogHelper.d(day30ExamList.size() + "个考试在未来30天内"); for (ExamStructure structure : day30ExamList) { Calendar time = structure.getStartTime(); if (time == null) continue; if (time.compareTo(calendar) > 0) return structure; } return null; } }