public void parse(long cityId, ContentProviderClient provider, SyncResult result) { try { WeatherData data = new Gson().fromJson(new InputStreamReader(mInputStream), WeatherData.class); result.stats.numDeletes += provider.delete( WeatherProvider.URI, WeatherProvider.Columns.CITY_ID + "=?", new String[] {String.valueOf(cityId)}); ContentValues cityValues = new ContentValues(); cityValues.put(CitiesProvider.Columns.NAME, data.getCityName()); result.stats.numUpdates += provider.update( CitiesProvider.URI, cityValues, CitiesProvider.Columns._ID + "=?", new String[] {String.valueOf(cityId)}); List<ContentValues> insertData = new ArrayList<>(); for (WeatherData.Measurement measurement : data.getMeasurements()) { ContentValues cv = new ContentValues(); cv.put(WeatherProvider.Columns.CITY_ID, cityId); cv.put(WeatherProvider.Columns.TEMP, measurement.getTemp()); cv.put(WeatherProvider.Columns.DATE, measurement.getDate()); cv.put(WeatherProvider.Columns.WIND_SPEED, measurement.getWindSpeed()); insertData.add(cv); } result.stats.numInserts += provider.bulkInsert( WeatherProvider.URI, insertData.toArray(new ContentValues[insertData.size()])); } catch (Exception e) { ++result.stats.numParseExceptions; } }