--- android/TrainInfo/src/dk/thoerup/traininfo/provider/XmlDepartureProvider.java 2010/08/02 23:18:53 1006 +++ android/TrainInfo/src/dk/thoerup/traininfo/provider/XmlDepartureProvider.java 2010/08/03 06:12:10 1007 @@ -18,45 +18,43 @@ import dk.thoerup.traininfo.util.DownloadUtil; import dk.thoerup.traininfo.util.XmlUtil; -public class XmlDepartureProvider extends DefaultHandler implements DepartureProvider { +public class XmlDepartureProvider implements DepartureProvider { final static int CACHE_TIMEOUT = 60*1000; AndroidTimeoutCache departureCache = new AndroidTimeoutCache(CACHE_TIMEOUT); - DepartureBean departures; DepartureEntry tempDeparture; StringBuilder builder = new StringBuilder(512); + + @Override - public boolean lookupDepartures(int stationID, boolean arrival) { - boolean success; + public DepartureBean lookupDepartures(int stationID, boolean arrival) { String key = "" + stationID + ":" + arrival; - departures = departureCache.get(key); + DepartureBean departures = departureCache.get(key); if (departures == null) { - success = lookupDeparturesWorker(stationID, arrival); + departures = lookupDeparturesWorker(stationID, arrival); - if (success) { + if (departures != null) { departureCache.put(key, departures); } } else { Log.i("XmlDepartureProvider", "cache hit !!!"); - success = true; } - return success; + return departures; } - private boolean lookupDeparturesWorker(int stationID, boolean arrival) { - boolean success = false; - departures = new DepartureBean(); + private DepartureBean lookupDeparturesWorker(int stationID, boolean arrival) { + try { int iArrival = arrival ? 1 : 0; @@ -70,73 +68,71 @@ SAXParser sp = spf.newSAXParser(); XMLReader xr = sp.getXMLReader(); - xr.setContentHandler(this); - xr.setErrorHandler(this); + DepartureParser departureParser = new DepartureParser(); + xr.setContentHandler(departureParser); + xr.setErrorHandler(departureParser); xr.parse(source); - success = true; + + return departureParser.getDepartures(); } catch (Exception e) { Log.e("XmlDepartureProvider", "looupFunction", e); - } - return success; + return null; + } } - @Override - public DepartureBean getDepartures(int station,boolean arrival) { - - String key = "" + station + ":" + arrival; - - DepartureBean bean = departureCache.get(key); - - if (bean == null) { - bean = new DepartureBean(); - } + + class DepartureParser extends DefaultHandler { - return bean; - } - - // this can be called several times fore the same text-node if there are many chardata / lines - @Override - public void characters (char ch[], int start, int length) - { - for (int i= start; i