diff options
Diffstat (limited to 'src/cgeo/geocaching/cgGPXParser.java')
| -rw-r--r-- | src/cgeo/geocaching/cgGPXParser.java | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/src/cgeo/geocaching/cgGPXParser.java b/src/cgeo/geocaching/cgGPXParser.java index ab76226..fcb0c95 100644 --- a/src/cgeo/geocaching/cgGPXParser.java +++ b/src/cgeo/geocaching/cgGPXParser.java @@ -2,12 +2,15 @@ package cgeo.geocaching; import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.xml.sax.Attributes; +import org.xml.sax.SAXException; import android.os.Handler; import android.os.Message; @@ -537,15 +540,26 @@ public class cgGPXParser { } }); } - + FileInputStream fis = null; + boolean parsed = false; try { - Xml.parse(new FileInputStream(file), Xml.Encoding.UTF_8, root.getContentHandler()); - - return search.getCurrentId(); - } catch (Exception e) { - Log.e(cgSettings.tag, "Cannot parse .gpx file " + file.getAbsolutePath() + " as GPX " + version + ": " + e.toString()); + fis = new FileInputStream(file); + } catch (FileNotFoundException e) { + Log.e(cgSettings.tag, "Cannot parse .gpx file " + file.getAbsolutePath() + " as GPX " + version + ": file not found!"); } - - return 0l; + try { + Xml.parse(fis, Xml.Encoding.UTF_8, root.getContentHandler()); + parsed = true; + } catch (IOException e) { + Log.e(cgSettings.tag, "Cannot parse .gpx file " + file.getAbsolutePath() + " as GPX " + version + ": could not read file!"); + } catch (SAXException e) { + Log.e(cgSettings.tag, "Cannot parse .gpx file " + file.getAbsolutePath() + " as GPX " + version + ": could not parse XML - " + e.toString()); + } + try { + fis.close(); + } catch (IOException e) { + Log.e(cgSettings.tag, "Error after parsing .gpx file " + file.getAbsolutePath() + " as GPX " + version + ": could not close file!"); + } + return parsed ? search.getCurrentId() : 0l; } } |
