如何保存/加载BigInteger数组
我想在SharedPreferences中保存/加载BigInteger
数组。 如何做呢?
例如,对于以下数组:
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); } }
要在gradle中添加Gson,请添加依赖项:
dependencies { compile 'com.google.code.gson:gson:1.7.2' }
考虑bigInts
是你想要的Preference
BigInteger[]
:
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); }
注意:您可以根据需要更改分隔符,但更喜欢使用字符数组。 相应地更改分隔符长度
试试这个,让我知道它是否有效