600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Android基础之数据存储(SharedPreference)

Android基础之数据存储(SharedPreference)

时间:2021-09-14 05:36:25

相关推荐

Android基础之数据存储(SharedPreference)

Android数据持久化是说在断电后数据不会丢失,而根据存储位置和实现方式一般有3种方式,这里说sharedpreferences:

一,sharedpreferences存储

该种方式是在应用独有目录data/data/[packgename]/shared_prefs/下生成相应的preferences文件保存数据。

保存的是键值对数据,所以比较适合用于保存设置,密码等数据。

API:

1,文件获取、创建

PreferenceManager.getDefaultSharedPreferences(Context context); //返回以包名命名的preferences,首次调用时没有文件就创建

Activity.this.getPreferences(MODE_PRIVATE);//返回以Activity名命名的preferences,首次调用时没有文件就创建

Context.getSharedPreferences("name",MODE_PRIVATE);//返回以name名命名的preferences,首次调用时没有文件就创建

2,数据获取:

defaultpreference.getBoolean("remember_pw",false);

defaultpreference.getString("account","");

3,数据添加,修改,移除

SharedPreferences.Editor editor=defaultpreference.edit();

editor.putString("account",account);

editor.putString("password",password);

editor.putBoolean("remember_pw",true);

editor.remove("accouint");//移除某个键值对

editor.clear();//移除所有数据

mit();

二,Preferences控件

以上是preferences的基础,实际使用过程中android提供了一系列封装了preferences的控件,自动生成packagename_preferencse.xml,自动保存这些数据,并立时生效。

1,常用Preferences控件

PreferenceScreen //所有Preference元素的根节点,如果嵌套,点击后出现一个新的屏幕

PreferenceCategory //用于组合一组Preference,使布局看起来具有层次关系,美观

ListPreference //显示一个相当的list,点击item选中保存对应value

CheckBoxPreference //相当于checkBox

EditTextPreference //等同于EditText,点击弹出对话框,编辑保存

2,控件属性

通用:

android:key 这个属性相当于android:id的作用。用此key来唯一表示此Preference

android:title Preference的标题,

android:summary 表示Preference提示语,相对于android:title来说显示要小点,而且显示位置在android:title下面

android:defaultValue 这个表示的是默认值,比如CheclPreference这种preference就可以指定默认是"true"还是“false”

android:enabled表示该Preference是否可用状态

特有:

ListPreference

<ListPreference

android:key="list"

android:title="Options"

android:entries="@array/entry_list"

android:entryValues="@array/values_list"

android:dialogTitle="list dialogtitle"

android:defaultValue="1"

/>

CheckBoxPreference

<CheckBoxPreference

android:key="checkbox_one"

android:title="checbox_one"

android:summaryOn="On_check_one"

android:summaryOff="offcheck_one"

/>

3,控件获取,点击,监听

Activity不是继承Activity,而是PreferenceActivity;

不是使用setContentView()方法,而是使用addPreferencesFromResource()方法来加载布局文件;

布局文件一般添加在res/xml下面,以PreferenceScreen为根元素的xml文件;

与一般Activity一样在AndroidManifest中注册。

获取控件:

mCheck=(CheckBoxPreference) findPreference("checkbox");

mRing=(RingtonePreference) findPreference("ring");

点击,监听:

对PreferenceActivity监听可以重写onPreferenceTreeClick()

对Preference控件可以注册OnPreferenceChangeListener和OnPreferenceClickListener

那么这三个点击事件在一起是什么用的呢?它的规则如下:

点击某个Preference控件后,会先回调onPreferenceChange()方法,即是否保存值,这里在实际使用中就会有一些使用处理。

然后再回调onPreferenceClick以及onPreferenceTreeClick()方法,因此在onPreferenceClick/onPreferenceTreeClick方法中我们得到的就是保存与否之后的,也就是最新的Preference控件值。

然后onPreferenceClick会比onPreferenceTreeClick()方法先调用,如果onPreferenceClick方法返回true,那就不会再调用onPreferenceTreeClick()方法,

如果onPreferenceClick()返回false就会继续调用onPreferenceTreeClick()方法。

下面是代码和log实例。

public class ItChqActivity extends PreferenceActivity {

private static String TAG="ItChqActivity";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Log.d(TAG,"oonCreate");

addPreferencesFromResource(R.xml.prftest);

CheckBoxPreference preference=(CheckBoxPreference)findPreference("checkbox");

preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {

@Override

public boolean onPreferenceChange(Preference preference, Object newValue) {

Log.d(TAG,"onPreferenceChange() newValuew="+newValue);

return true;

}

});

preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {

@Override

public boolean onPreferenceClick(Preference preference) {

Log.d(TAG,"onPreferenceClick preference.Valuew="+PreferenceManager.getDefaultSharedPreferences(ItChqActivity.this).getBoolean(preference.getKey(),false));

return true;

}

});

}

@Override

public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {

Log.d(TAG,"onPreferenceTreeClick()");

if(preference.getKey().equals("checkbox")){

Log.i("itchq", "checkbox");

}

return true;

}

}

1,OnPreferenceChangeListener return true

09-23 08:37:24.904 9135-9135/com.coder.piano.loginactivity D/ItChqActivity: onPreferenceChange() newValuew=false

09-23 08:37:24.905 9135-9135/com.coder.piano.loginactivity D/ItChqActivity: onPreferenceClick preference.Valuew=false

09-23 08:37:24.905 9135-9135/com.coder.piano.loginactivity D/ItChqActivity: onPreferenceTreeClick()

2,OnPreferenceChangeListener return false

09-23 08:39:54.072 9344-9344/com.coder.piano.loginactivity D/ItChqActivity: onPreferenceChange() newValuew=false

09-23 08:39:54.072 9344-9344/com.coder.piano.loginactivity D/ItChqActivity: onPreferenceClick preference.Valuew=true

09-23 08:39:54.072 9344-9344/com.coder.piano.loginactivity D/ItChqActivity: onPreferenceTreeClick()

3,onPreferenceClick return true

09-23 08:41:56.144 9557-9557/com.coder.piano.loginactivity D/ItChqActivity: onPreferenceChange() newValuew=false

09-23 08:41:56.144 9557-9557/com.coder.piano.loginactivity D/ItChqActivity: onPreferenceClick preference.Valuew=false

参考:/itchq/p/3888284.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。