Android: копирование / дублирование SharedPreferences

Есть ли способ скопировать или дублировать SharedPreference? Или мне нужно получить каждую переменную от одной, а затем поместить их в другую?

Попробуйте что-то вроде этого:

//sp1 is the shared pref to copy to SharedPreferences.Editor ed = sp1.edit(); SharedPreferences sp = Sp2; //The shared preferences to copy from ed.clear(); // This clears the one we are copying to, but you don't necessarily need to do that. //Cycle through all the entries in the sp for(Entry<String,?> entry : sp.getAll().entrySet()){ Object v = entry.getValue(); String key = entry.getKey(); //Now we just figure out what type it is, so we can copy it. // Note that i am using Boolean and Integer instead of boolean and int. // That's because the Entry class can only hold objects and int and boolean are primatives. if(v instanceof Boolean) // Also note that i have to cast the object to a Boolean // and then use .booleanValue to get the boolean ed.putBoolean(key, ((Boolean)v).booleanValue()); else if(v instanceof Float) ed.putFloat(key, ((Float)v).floatValue()); else if(v instanceof Integer) ed.putInt(key, ((Integer)v).intValue()); else if(v instanceof Long) ed.putLong(key, ((Long)v).longValue()); else if(v instanceof String) ed.putString(key, ((String)v)); } ed.commit(); //save it. 

Надеюсь это поможет.

Здесь версия, которая также поддерживает наборы строк.

 public static void copySharedPreferences(SharedPreferences fromPreferences, SharedPreferences toPreferences) { copySharedPreferences(fromPreferences, toPreferences, true); } public static void copySharedPreferences(SharedPreferences fromPreferences, SharedPreferences toPreferences, boolean clear) { SharedPreferences.Editor editor = toPreferences.edit(); if (clear) { editor.clear(); } copySharedPreferences(fromPreferences, editor); editor.commit(); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) @SuppressWarnings({"unchecked", "ConstantConditions"}) public static void copySharedPreferences(SharedPreferences fromPreferences, SharedPreferences.Editor toEditor) { for (Map.Entry<String, ?> entry : fromPreferences.getAll().entrySet()) { Object value = entry.getValue(); String key = entry.getKey(); if (value instanceof String) { toEditor.putString(key, ((String) value)); } else if (value instanceof Set) { toEditor.putStringSet(key, (Set<String>) value); // EditorImpl.putStringSet already creates a copy of the set } else if (value instanceof Integer) { toEditor.putInt(key, (Integer) value); } else if (value instanceof Long) { toEditor.putLong(key, (Long) value); } else if (value instanceof Float) { toEditor.putFloat(key, (Float) value); } else if (value instanceof Boolean) { toEditor.putBoolean(key, (Boolean) value); } } } 
Intereting Posts
Получить контекст в классе без активности ActionSherlockBar Styling – PopupMenu Android onLayout () и AsyncTask () не работают вместе Передайте комплексный параметр от ksoap Android до веб-службы WCF Соединение Bluetooth без сопряжения Программная прокрутка слова в виде в текстовом виде Каков правильный способ обработки действия NEW_OUTGOING_CALL во время цикла? Как обращаться с несколькими входами и сессиями социальных сетей Поток на Android? Обратное проектирование: Извлечение изображений / лист спрайтов из apk Как включить JAR в APK без Eclipse? Синхронизировать таблицу базы данных SQLite / Android с удаленной базой данных MySQL (через PHP) Темы Android Holo с обратной совместимостью В Android, используя exoplayer, как заполнить обзор поверхности видео, которое не имеет одинакового соотношения сторон с устройством? После запуска программы Google Places API Как реализовать функцию «Отправить отзыв» в Android?