@Override
 public boolean exportValue(JSONObject json, String key, SharedPreferences preferences) {
   final Preference preference = supportedMap.get(key);
   if (preference == null || !preference.exportable()) return false;
   try {
     switch (preference.type()) {
       case BOOLEAN:
         json.put(key, preferences.getBoolean(key, preference.defaultBoolean()));
         break;
       case INT:
         json.put(key, preferences.getInt(key, preference.defaultInt()));
         break;
       case LONG:
         json.put(key, preferences.getLong(key, preference.defaultLong()));
         break;
       case FLOAT:
         json.put(key, preferences.getFloat(key, preference.defaultFloat()));
         break;
       case STRING:
         json.put(key, preferences.getString(key, preference.defaultString()));
         break;
       default:
         break;
     }
   } catch (JSONException e) {
     return false;
   }
   return true;
 }
 @Override
 public boolean importValue(JSONObject json, String key, SharedPreferences.Editor editor) {
   final Preference preference = supportedMap.get(key);
   if (preference == null || !preference.exportable()) return false;
   switch (preference.type()) {
     case BOOLEAN:
       editor.putBoolean(key, json.optBoolean(key, preference.defaultBoolean()));
       break;
     case INT:
       editor.putInt(key, json.optInt(key, preference.defaultInt()));
       break;
     case LONG:
       editor.putLong(key, json.optLong(key, preference.defaultLong()));
       break;
     case FLOAT:
       editor.putFloat(key, (float) json.optDouble(key, preference.defaultFloat()));
       break;
     case STRING:
       editor.putString(key, json.optString(key, preference.defaultString()));
       break;
     default:
       break;
   }
   return true;
 }