Как перенести файл sharedpreferences из внутреннего хранилища во внешнее хранилище?
Как копировать sharedpreferences
на внешнее хранение xml format
, так что позже можно будет поделиться настройками.
Пытался читать sharedpreferences
и сохранить как string
в файл, созданный JSON
тип string
, но мне нужна xml
, Мысль о том, чтобы пройти через внутреннее хранилище приложения и скопировать файл и поместить его во внешнее хранилище, но это может быть слишком сложным.
Просто очень хотелось бы знать, есть ли простой и разумный способ передачи `sharedpreferences.
1 ответ
Решение
Используйте этот код,
SharedPreferences preferences=this.getSharedPreferences("com.example.application", Context.MODE_PRIVATE);
Map<String,?> keys = preferences.getAll();
Properties properties = new Properties();
for(Map.Entry<String,?> entry : keys.entrySet()){
String key = entry.getKey();
String value = entry.getValue().toString();
properties.setProperty(key, value);
}
try {
File file = new File("externalPreferences.xml");
FileOutputStream fileOut = new FileOutputStream(file);
properties.storeToXML(fileOut, "External Preferences");
fileOut.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
и чтобы извлечь это,
try {
File file = new File("externalPreferences.xml");
FileInputStream fileInput = new FileInputStream(file);
Properties properties = new Properties();
properties.loadFromXML(fileInput);
fileInput.close();
Enumeration enuKeys = properties.keys();
SharedPreferences.Editor editor = preferences.edit();
while (enuKeys.hasMoreElements()) {
String key = (String) enuKeys.nextElement();
String value = properties.getProperty(key);
editor.putString(key, value);
editor.commit();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
ПРИМЕЧАНИЕ С этим кодом вы можете обрабатывать только настройки типа String,
Для загрузки общих предпочтений из файла попробуйте это
private fun loadSharedPreferences(src: File, sharedPreferences : SharedPreferences) {
try{
var fileInput : FileInputStream = FileInputStream(src)
val properties : Properties = Properties()
properties.loadFromXML(fileInput)
fileInput.close()
val enuKeys = properties.keys()
val editor = sharedPreferences.edit()
while (enuKeys.hasMoreElements()){
var key = enuKeys.nextElement() as String
var value = properties.getProperty(key)
when {
key.contains("string",true) -> { //in my case the key of a String contain "string"
editor.putString(key, value)
}
key.contains("int", true) -> { //in my case the key of a Int contain "int"
editor.putInt(key, value.toInt())
}
key.contains("boolean", true) -> { // //in my case the key of a Boolean contain "boolean"
editor.putBoolean(key, value.toBoolean())
}
}
editor.apply();
}
}catch ( e : FileNotFoundException) {
e.printStackTrace();
} catch ( e : IOException) {
e.printStackTrace();
}
}