Ignore:
Timestamp:
2014-06-30T20:48:13+02:00 (10 years ago)
Author:
glebius
Message:

Fixes for r30234.

  • No need to embrace JsonObject.getJsonNumber() into try {}. This method doesn't throw JsonException.
  • Lat/Lon must be always present of TPV mode >= 2, so we don't need to check for these fields.
  • Speed/Track may be missing in TPV, so first check that the JsonObject is not null. This fixes instant crashes of LiveGPS.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/livegps/src/livegps/LiveGpsAcquirer.java

    r30351 r30504  
    259259    private LiveGpsData ParseJSON(String line) {
    260260        JsonObject report;
    261         String type;
    262         double lat = 0;
    263         double lon = 0;
     261        double lat, lon;
    264262        float speed = 0;
    265263        float course = 0;
     
    269267        try {
    270268            report = Json.createReader(new StringReader(line)).readObject();
    271             type = report.getString("class");
    272269        } catch (JsonException jex) {
    273270            Main.warn("LiveGps: line read from gpsd is not a JSON object:" + line);
    274271            return null;
    275272        }
    276         if (!type.equals("TPV"))
     273        if (!report.getString("class").equals("TPV") || report.getInt("mode") < 2)
    277274            return null;
    278275
    279         try {
    280             lat = report.getJsonNumber("lat").doubleValue();
    281             lon = report.getJsonNumber("lon").doubleValue();
    282             speed = (new Float(report.getJsonNumber("speed").doubleValue())).floatValue();
    283             course = (new Float(report.getJsonNumber("track").doubleValue())).floatValue();
    284             JsonNumber epxJson = report.getJsonNumber("epx");
    285             if (epxJson != null)
    286                 epx = (new Float(epxJson.doubleValue())).floatValue();
    287             JsonNumber epyJson = report.getJsonNumber("epy");
    288             if (epyJson != null)
    289                 epy = (new Float(epyJson.doubleValue())).floatValue();
    290 
    291             return new LiveGpsData(lat, lon, course, speed, epx, epy);
    292         } catch (JsonException je) {
    293             Main.debug(je.getMessage());
    294         }
    295 
    296         return null;
     276        lat = report.getJsonNumber("lat").doubleValue();
     277        lon = report.getJsonNumber("lon").doubleValue();
     278
     279        JsonNumber epxJson = report.getJsonNumber("epx");
     280        JsonNumber epyJson = report.getJsonNumber("epy");
     281        JsonNumber speedJson = report.getJsonNumber("speed");
     282        JsonNumber trackJson = report.getJsonNumber("track");
     283
     284        if (speedJson != null)
     285            speed = (float )speedJson.doubleValue();
     286        if (trackJson != null)
     287            course = (float )trackJson.doubleValue();
     288        if (epxJson != null)
     289            epx = (float )epxJson.doubleValue();
     290        if (epyJson != null)
     291            epy = (float )epyJson.doubleValue();
     292
     293        return new LiveGpsData(lat, lon, course, speed, epx, epy);
    297294    }
    298295
Note: See TracChangeset for help on using the changeset viewer.