SharedPreference
使用getSharedPreference(name,mode)或者这个SharedPreference,下面的例子,第一次显然是没有这个文件的。这个方法可以在
app中的任何Context调用,这个方法是属于某个Context的,就是需要有上下文,sunshine的工具类这个方法:
public static String getPreferredLocation(Context context) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); return prefs.getString(context.getString(R.string.pref_location_key), context.getString(R.string.pref_location_default)); }有点区别,应该是Preference的问题,一会讨论。
获得SharedPreference之后,读很简单,直接调用getString,getInt等方法,如果要写的话,需要获得一个SharedPreference.Edtior,可以通过
SharedPreference.edit()方法获得,接着调用Editor的putInt putString等方法写,
最后要注意,一定要调用Editor.commit方法。这样数据就
提交了下面的完整的例子。
public class MainActivity extends AppCompatActivity { SharedPreferences preferences; SharedPreferences.Editor editor; public static final String PRE_TAG = "sy.com"; public static final String KEY_TIME = "time"; public static final String KEY_RANDOM = "random"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); preferences = getSharedPreferences(PRE_TAG, MODE_PRIVATE); editor = preferences.edit(); Button read = (Button)findViewById(R.id.read); Button write = (Button)findViewById(R.id.write); read.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String time = preferences.getString(KEY_TIME, null); int random = preferences.getInt(KEY_RANDOM, 0); String result = time == null ? "暂时未写入数据" : "上次写入时间" + time + "\n上次生成随机数" + random; Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show(); } }); write.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss"); editor.putString(KEY_TIME, sdf.format(new Date())); editor.putInt(KEY_RANDOM,(int)(Math.random() * 100)); editor.commit(); } }); } }
Setting的Preference
Preference翻译出来就是偏好,设置用户的偏好。
不是用View对象设置用户界面,设置使用Preference的各种在XML文件中声明的子类。
一个Preference对象是一个单独设置的构造组件。每一个Preference展示为一个list的item,为用户提供设置。
我们添加的每一个Preference有一个相对应的键值对保存在一个默认的SharedPreference文件中,用户修改设置,
SharedPreference文件的内容也随之修改。我们不用管写,只需要在用的时候读就可以了。
因为不是用View构造的,所以展示这个设置页面需要一些特殊的子类,3.0之前的,继承PreferenceActivity,3.0之后
可以使用传统的Activity,持有一个PreferenceFragment对象。也可以使用PreferenceActivity创建一个两面的布局为大屏幕。
二者区别联系
每一个偏好的选项,一定要有一个Key,这个key指定了在SharedPreference文件中的key,用他来获取这个偏好选项的值,
安卓系统帮我们维护了这个偏好选项的更新,我们要做的就是读。