Android的数据存储之一------SharedPreferences
下面将介绍下Android的数据存储,Android提供了5种方式存储数据:
1.SharedPreferences存储数据;
2.文件存储数据;
3.SQLite数据库存储数据;
4.使用ContentProvider存储数据;
5. 网络存储数据;
今天我先介绍下最简单的SharedPreferences存储数据;
SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长 整形、Int整形、String字符串型的保存,它是什么样的处理方式呢?
SharedPreferences类似过去Windows系统上的ini配置文件,但是它分为多种权限,可以全局共享访问,android最 终是以xml方式来保存(在Android系统中,这些信息以XML文件的形式保存在/data/data/PACKAGE_NAME /shared_prefs 目录下。),整体效率来看不是特别的高,对于常规的轻量级而言比SQLite要好不少,如果真的存储量不大可以考虑自己定义文件格式。xml 处理时Dalvik会通过自带底层的本地XML Parser解析,比如XMLpull方式,这样对于内存资源占用比较好。
用于访问和修改getSharedPreferences(String, int)返回的preference data的一个接口。对于任何一组特殊的preferences,所有的客户端共享一个此类单独的实例。
修改Preferences必须通过一个SharedPreferences.Editor对象,以确保当他们提交存储数据的操作时,preference值保持一致的状态。
注意:
1》当前此类不支持多线程访问。
2》使用SharedPreferences是有些限制的:只能在同一个包内使用,不能在不同的包之间使用。
SharedPreferences的步骤:
1.Call edit() to get a SharedPreferences.Editor.
2.Add values with methods such as putBoolean() and putString().
3.Commit the new values with commit()
上代码:
public class SharedPreferencesActivity extends Activity{private final static String SETTING = "potato";private Button mBtnSave;private Button mBtnShow;private EditText mEditViewName;private EditText mEditViewAge;private TextView mTextViewResult; /** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);mBtnSave = (Button) findViewById(R.id.btnSave);mBtnShow = (Button) findViewById(R.id.btnShow);mEditViewName = (EditText) findViewById(R.id.editName);mEditViewAge = (EditText) findViewById(R.id.editAge);mTextViewResult = (TextView)findViewById(R.id.txtResult);mBtnSave.setOnClickListener(listener);mBtnShow.setOnClickListener(listener);}/** * 事件监听器 */private OnClickListener listener = new OnClickListener(){@Overridepublic void onClick(View v){SharedPreferences pres = SharedPreferencesActivity.this. // 注1getSharedPreferences(SETTING, Context.MODE_PRIVATE);switch (v.getId()){// 保存数据case R.id.btnSave:Editor editor = pres.edit(); // 注2editor.putString("name", mEditViewName.getText().toString());editor.putInt("age", Integer.valueOf(mEditViewAge.getText().toString()));editor.commit();Toast.makeText(SharedPreferencesActivity.this, "保存成功", Toast.LENGTH_LONG).show();break;// 显示数据case R.id.btnShow:String name = pres.getString("name", "NO"); // 注3int age = pres.getInt("age", 0);String bir = pres.getString("bir", "NO");mTextViewResult.setText("Name="+name+";age="+age+";bir="+bir);break;}}};}
注1:
SharedPreferences pres = SharedPreferencesActivity.this. // 注1getSharedPreferences(SETTING, Context.MODE_PRIVATE);通过名称,得到一个SharedPreferences,顾名思义,这个Preferences是共享的,共享的范围据现在同一个Package中,这里 面说所的Package和Java里面的那个Package不同,貌似这里面的Package是指在AndroidManifest.xml文件中的Package属性值。
第二参数:
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
注2:
注3:
存储和取值的过程这有点像HashMap但是比HashMap更具人性化,getXXX(Object key,Object defualtReturnValue),
第二个参数是当你所要的key对应没有时候返回的值(所谓的默认值)。这就省去了很多逻辑判断。。。。
editor.commit();这个一定要调用,因为这样才能提交修改的内容,否则如果赋值过程中数据类型错误,抛出异常,那就数据就不保存了,但是有了commit(),就不会出现这样问题。。。。
有问题请留言。。。。。
更多相关文章
- android保存手势操作到文件&读取识别手势
- Android数据绑定Data Binding初体验
- Android 绑定数据到界面控件
- Android使用AIDL跨进程数据共享
- Android 传感器的 数据流和框架
- Android listview中嵌套Checkbox的布局文件
- Android 数据操作之SQLiteDatabase
- 获取PCM音频数据的声音分贝值
- android studio导入 so ,jar 文件。