What is a good way to save a Location object?

I would like to save the Location object and am trying to choose a good way to do this. I only have one small object, and I need it to be private, so SharedPreferences or Internal Storage still make sense to me.

I see that the object can be written to a bytearray saved as a String in SharedPreferences, and then written back to the object, as described here .

Is this a smart approach? Is there a better way?

Thanks for any advice.

+4
source share
1 answer

When storing simple data, I prefer to use JSON objects, since the code is simpler and more understandable for future maintainers than manipulating byte arrays. Because the objects are small, the penalty for using strings instead of byte arrays is small.

private static final String LATITUDE = "com.somepackage.name.LATITUDE"; private static final String LONGITUDE = "com.somepackage.name.LONGITUDE"; /** * Save a location/key pair. * * @param key the key associated with the location * @param location the location for the key * @return true if saved successfully false otherwise */ public boolean saveLocation(String key, Location location) { LOG.info("Saving location"); try { JSONObject locationJson = new JSONObject(); locationJson.put(LATITUDE, location.getLatitude()); locationJson.put(LONGITUDE, location.getLongitude()); //other location data SharedPreferences.Editor edit = preferences.edit(); edit.putString(key, locationJson.toString()); edit.commit(); } catch (JSONException e) { LOG.error("JSON Exception", e); return false; } LOG.info("Location {} saved successfully at key: {}", preferences.getString(key, null),key); return true; } /** * Gets location data for a key. * * @param key the key for the saved location * @return a {@link Location} object or null if there is no entry for the key */ public Location getLocation(String key) { LOG.info("Retrieving location at key {} ", key); try { String json = preferences.getString(key, null); if (json != null) { JSONObject locationJson = new JSONObject(json); Location location = new Location(STORAGE); location.setLatitude(locationJson.getInt(LATITUDE)); location.setLongitude(locationJson.getInt(LONGITUDE)); LOG.info("Returning location: {}" , location); return location; } } catch (JSONException e) { LOG.error("JSON Exception", e); } LOG.warn("No location found at key {}", key); //or throw exception depending on your logic return null; } 
+3
source

Source: https://habr.com/ru/post/1433248/


All Articles