SharedPreferences
基本用法:
1)存數據:
//第一個參數是文件名,不需要加.xml后綴,如果文件不存在,系統會自動生成。
//文件路徑為:/data/data/<packagename>/shared_prefs/xxx.xml
SharedPreferences sp = getSharedPreferences("loginsetting", MODE_PRIVATE); String name = sp.getString("name", ""); String password = sp.getString("pwd", "");
2)取數據
SharedPreferences sp = getSharedPreferences("loginsetting", MODE_PRIVATE); String name = sp.getString("name", ""); String password = sp.getString("pwd", "");
其他:
//getPreferences(mode)與getSharedPreferences(String filename,mode)
//區別在於getPreferences只有一個參數,不能指定文件名,文件名固定為
//當前Activity的名字,不包含包名。
SharedPreferences sp = getPreferences(MODE_PRIVATE); Editor editor = sp.edit(); editor.putFloat("money", 100000.0f); editor.commit();
//通過PreferenceManager.getDefaultSharedPreferences(Context),獲取到
的SharedPreferences MODE默認為MODE_PRIVATE,而且生成文件名為
<包名>_preferences.xml
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); Editor editor = sp.edit(); editor.putFloat("money", 100000.0f); editor.commit();
------------------三個mode
MODE_PRIVATE 私有的,不允許其他程序訪問該xml文件。
MODE_WORLD_READABLE 其他程序可以讀取
MODE_WORLD_WRITABLE 其他程序可以寫
這里其他程序如何訪問呢?
有兩種方式:
第一種,在第二個程序中通過File:
File f = new File("/data/data/包名/shared_prefs/xxx.xml"); FileInputStream fis = new FileInputStream(f);//在被訪問程序中,MODE_WORLD_READABLE FileOutputStream fos = new FileOutputStream(f);//在被訪問程序中,MODE_WORLD_WRITABLE
第二種,通過被訪問程序的Context對象。
Context otherContext = createPackageContext(
"com.anjoyo.sharedpreference", CONTEXT_IGNORE_SECURITY);
第一個參數為要創建context的包名,第二個參數為創建時忽略安全問題。
SharedPreferences sp = otherContext.getSharedPreferences ("loginsetting", MODE_WORLD_READABLE); String name = sp.getString("name", ""); String pwd = sp.getString("pwd", "");
SharedPreference可以保存多個數據
sp = PreferenceManager.getDefaultSharedPreferences(this);
存:
SharedPreferences.Editor editor = sp.edit(); Set<String> set = new HashSet<String>(); set.add("java"); set.add("C++"); set.add("c"); editor.putStringSet("books", set); editor.commit();
取:
Set<String> books = sp.getStringSet("books", null);