SharedPreferences可以用来永久地存储数据,即使应用被销毁。事实上数据存储在Android的内部存储器上。
有两种分方法用来获取SharedPreferences对象。 getSharedPreferences() - 当应用需要多个由名字区分的存储文件时,可以调用这个方法。getPreferences()-当应用只需要一个存储文件时,调用这个方法。
在SharedPreferences对象中写入数据,需要:
1.调用edit()方法获得一个SharedPreferences.Editor对象。
2.使用Editor对象的方法比如putBoolean()和putString()等将数据写入Editor。
3.使用Editor对象的方法commit()或apply()将数据提交。
读取SharedPreferences中的数据只需要调用SharedPreferences的方法如getBoolean()和getString().
@Override protected void onCreate(Bundle state){ super.onCreate(state); . . . // Restore preferences SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); boolean silent = settings.getBoolean("silentMode", false); setSilent(silent); } @Override protected void onStop(){ super.onStop(); // We need an Editor object to make preference changes. // All objects are from android.context.Context SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("silentMode", mSilentMode); // Commit the edits! editor.commit(); }SharedPreferences的局限性在于只能存储基本类型:boolean,float,short,int,long,string等。
如何改造让他可以存数组: SharedPreferences
<?xml version="1.0" encoding="utf-8"?> <map> <boolean name="com.android.inputmethod.latin/.LatinIME" value="true"/> <boolean name="sound_effects" value="true"/> <string name="hdcp_checking">drm-only</string> <string name="font_size">1.0</string> <boolean name="lock_sounds" value="true"/> <boolean name="allow_mock_location" value="true"/> <boolean name="haptic_feedback" value="true"/> <boolean name="keep_screen_on" value="true"/> <boolean name="dtmf_tone" value="true"/> </map>通过改造实现shareprefernces存储list数据
public List<String> getINfo() { List<String> list=new ArrayList<String>(); int size=sp.getInt(HISTORY_SIZE,0); for (int i = 0; i <size ; i++) { list.add(sp.getString(HISTORY+i,null)); } return list; } public void SaveInfo( List<String> list){ sp.putInt(HISTORY_SIZE,list.size()); for (int i = 0; i <list.size() ; i++) { sp.remove(HISTORY+i); sp.putString(HISTORY+i,list.get(i)); } }上面是个list数据,如果数据是List,可能就比较复杂了。 我们就需要另外一个工具,名叫json。
类似 XML JSON 是纯文本 JSON 具有“自我描述性”(人类可读) JSON 具有层级结构(值中存在值) String的最大长度是
JSON 语法是 JavaScript 对象表示法语法的子集。
数据在名称/值对中 “城市”:“北京”
数据由逗号分隔
花括号保存对象 {“城市”:“北京”,“户籍”:“南京”}
方括号保存数组 {“employees”:[{“name”:“jack”,“age”:“13”},{“name”:“mina”,“age”:“15”}]}
Gson 谷歌用来解析json数据的java包
//需要存储的list User user1 = new User("jack", "123456789", "http://www.hello.com/1.png"); User user2 = new User("tom", "45467956456", "http://www.hello.com/2.png"); User user3 = new User("lily", "65465897faf", "http://www.hello.com/3.png"); ArrayList<User> users = new ArrayList<>(); users.add(user1); users.add(user2); users.add(user3); 存储方法 Gson gson = new Gson(); //list转换为json(string) String jsonStr = gson.toJson(users); sp.put(mContext, "USERS_KEY", jsonStr); 取出方法 String str = (String) SPUtils.get(mContext, "USERS_KEY", ""); users = gson.fromJson(str, new TypeToken<List<User>>() {}.getType()); for (User user : users) { if (user.getUsername().equals("jack")) { L.d(user.getProfile_pic()); } }