Android:回車儲存到SharePreference異常
阿新 • • 發佈:2018-12-05
背景
在專案中發現,當通過SharePreference儲存一個回車。如果重新安裝應用,這個回車讀出來的值就改變了。
分析
通過讀取儲存時候的EditText裡面的String值,通過toCharArray轉換成char陣列,列印每個陣列的ascii碼。發現輸出是10,10.也就是回車對應的ascii碼。
重新安裝應用,從SharePreference裡面讀取儲存的回車值,再次列印char陣列,發現該陣列為:10,32,10,32,32. 跟視覺上的異常情況類似。
懷疑是char值轉換成String的時候出現異常。
解決方法
不使用SharePreference來儲存特殊字元,而是採用讀寫檔案的方式。經過驗證,解決該問題。在onPause的時候writeFile,然後在onCreate的時候readFile並且設定到EditText中即可。多個數值之間用冒號分隔。
程式碼如下:
private void writeFile() { try { FileOutputStream fos = openFileOutput(FILE_NAME, MODE_PRIVATE); CharSequence prefix = mPrefix.getText();//mPrefix和mSuffix為EditText CharSequence suffix = mSuffix.getText(); String writeResult = prefix+":"+suffix; fos.write(writeResult.getBytes()); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private void readFile(){ String result = ""; try { FileInputStream fis = openFileInput(FILE_NAME); int len = fis.available(); if(len <= 0) { return; } byte[] buffer = new byte[len]; fis.read(buffer); result = new String(buffer, "UTF-8"); String[] split = result.split(":"); sPrefix = split[0]; sSuffix = split[1]; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }