Как сохранить / загрузить массив BigInteger

Я хочу сохранить / загрузить массив BigInteger в / из SharedPreferences. Как это можно сделать?

Например, для следующего массива:

 private BigInteger[] dataCreatedTimes = new BigInteger[20]; 

Используя Gson, вы можете конвертировать в json String и обратно, что, конечно же, делает тривиальным сохранение предпочтений:

 import com.google.gson.Gson; import java.math.BigInteger; public final class BigIntegerArrayJson { private BigIntegerArrayJson(){} public static String toJson(BigInteger[] array) { return new Gson().toJson(array); } public static BigInteger[] fromJson(String json) { return new Gson().fromJson(json, BigInteger[].class); } } 

Чтобы добавить зависимость Gson от gradle add:

 dependencies { compile 'com.google.code.gson:gson:1.7.2' } 

Рассмотрим bigInts – это BigInteger[] вы хотите от Preference :

 BigInteger[] bigInts = new BigInteger[n]; Set set = new HashSet(); for(BigInteger bigInt : bigInts) { set.add(bigInt.toString()); } //store into Preference SharedPreference.Editor editor = getSharedPreference(getPackageName(), Context.MODE_PRIVATE).edit(); editor.putStringSet("bigints", set); //get BitInteger[] from Preference SharedPreference pref = getSharedPreference(getPackageName(), Context.MODE_PRIVATE); Set set = pref.getStringSet("bigints", new HashSet()); int count = set.size(); String[] strs = new String[count]; BigInteger[] bigInts= new BigInteger[count]; set.toArray(strs); for(int i = 0; i < count; i++) { bitInts[i] = new BigInteger(strs[i]); } 
  final String DELIMITER = "BOND"; final int DELIMITER_LENGTH = 4; String str = ""; BigInteger[] integer = new BigInteger[50]; for(int i = 0; i < integer.length ; i++) { str += integer[i].toString() + DELIMITER; } savePreference("your_key", str); 

и вот ваш метод предпочтений сохранения

 public static void savePreference(String iName, String iValue) { SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences( MainApplication.getsApplicationContext()).edit(); // Check that passed key is not null if (iName != null && iValue != null) { editor.putString(iName, iValue); editor.commit(); } } 

Теперь, чтобы вернуть ваши значения BigInteger,

 String str = loadPreference("your_key"); ArrayList myBigInt = new ArrayList<>(); while(str != null){ int subStringLastIndex = 0; if(str.contains(DELIMITER) && str.length() != DELIMITER_LENGTH){ subStringLastIndex = str.indexOf(DELIMITER.charAt(0)); myBigInt.add(new BigInteger(str.substring(0, subStringLastIndex))); str = str.substring(subStringLastIndex + 4); }else{ str = null; } } for(int i = 0; i < myBigInt.size(); i++){ Log.d(TAG, myBigInt.get(i).toString()); } 

Вот ваш метод loadPreference

 public static String loadPreference(String iName) { return PreferenceManager.getDefaultSharedPreferences(MainApplication.getsApplicationContext()). getString(iName,null); } 

Примечание. Вы можете изменить разделитель, что хотите, но предпочитаете использовать массив символов. Изменить длину разделителя соответственно

Попробуйте это и сообщите мне, если он работает