一、共享首选项-SharedPreferences
(一)概述
有些应用需要保存配置信息,如是否打开音效开关、登录时是否保存上次输入的用户名、密码等。Android 对这些类应用提供了 SharedPreferences(共享首选项),共享首选项适合数据量少,数据以键/值对的方式保存的应用。
(二)常用类/接口
1、SharedPreferences 接口
作用:该接口中定义了共享首选项操作的方法和一个重要的内部接口:Editor。
2、Editor 接口
作用:该接口定义了存储、删除数据的方法。
(三)常用方法
1、context.getSharedPreferences(String fileName,int mode);
作用:创建 SharedPreferences 接口的实现类的对象
第一个参数——fileName:指定共享首选项数据保存、读取的文件名。该文件存放在data/data/packageName/shared_prefs文件夹下。通过eclipse中的DDMS视图中的file-explorer视图可以找到当前项目中以上文件夹。默认文件名:类名.xml。
第二个参数——mode:共享首选项文件的存取权限,通过以下常量设置:
MODE_WORLD_PRIVATE:私有属性,只有本项目才能存取第一个参数指定的.xml文件。
MODE_WORLD_READABLE:允许其它项目读取本项目中的xml文件内容。
MODE_WORLD_WRITEABLE:允许其它项目向本项目中的.xml文件写数据。
——————————存数据————————————
2、共享首选项文件存储的相关方法:
1)Editor.putInt(String key,int value) 作用:存放键名为key的int类型的数据 2)Editor.putFloat(String key,float value) 作用:存放键名为key的float类型的数据 3)Editor.putString(String key,String value) 作用:存放键名为key的String类型的数据 4)Editor.putBoolean(String key,Boolean value) 作用:存放键名为key的Boolean类型的数据 5)Editor.putLong(String key,long value) 作用:存放键名为key的long类型的数据 6)Editor.remove(String key) 作用:移除键名为key的键/值对 7)Eidtor.commit() 作用:提交修改、保存结果 提示:只有执行了本方法,以上的put方法存储的数据才能真正有效。
——————————取数据————————————
3、共享首选等文件读取的相关方法(以下方法均从属于SharedPreferences接口的实现类)
1)int getInt(String key,int defValue) 作用:获取键名是key的int类型的数据,若没有key,则可以设置一个默认值:defValue 2)boolean getBoolean(String key,Boolean defValue) 作用:获取键名是key的boolean类型的数据,若没有key,则可以设置一个默认值:defValue 3)float getFloat(String key,float defValue) 作用:获取键名是key的float类型的数据,若没有key,则可以设置一个默认值:defValue 4)long getLong(String key,long defValue) 作用:获取键名是key的long类型的数据,若没有key,则可以设置一个默认值:defValue 5)String getString(String key,String defValue) 作用:获取键名是key的String类型的数据,若没有key,则可以设置一个默认值:defValue
案例:
package com.jxust.day06_05_sharedpreferencesdemo; import android.app.Activity; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.text.TextUtils; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { EditText metId, metPwd; SharedPreferences mSp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); setListener(); readData(); } private void readData() { mSp = getSharedPreferences("login", MODE_PRIVATE); String id = mSp.getString("id", ""); String password = mSp.getString("password", ""); metId.setText(id); metPwd.setText(password); } private void setListener() { findViewById(R.id.btnLogin).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String id = metId.getText().toString(); if(TextUtils.isEmpty(id)){ metId.setError("编号不能为空!"); return; } String password = metPwd.getText().toString(); if(TextUtils.isEmpty(password)){ metPwd.setError("密码不能为空!"); return; } mSp = getSharedPreferences("login", MODE_PRIVATE); Editor editor = mSp.edit(); //会生成一个Editor类型的引用变量 editor.putString("id", id); editor.putString("password", password); editor.commit(); Toast.makeText(MainActivity.this, "登陆完成!", 3000).show(); } }); findViewById(R.id.btnExit).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); } private void initView() { metId = (EditText) findViewById(R.id.etId); metPwd = (EditText) findViewById(R.id.etPwd); } }
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="登陆编号" /> <EditText android:id="@+id/etId" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="2-10个字符" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="登陆密码" /> <EditText android:id="@+id/etPwd" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="2-10个字符" android:password="true" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:orientation="horizontal" > <Button android:id="@+id/btnLogin" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_weight="1" android:text="登陆" /> <Button android:id="@+id/btnExit" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_weight="1" android:text="退出" /> </LinearLayout> </LinearLayout>