Android SharedPreferences使用
来源:互联网 发布:mac版flashplayer 编辑:程序博客网 时间:2024/04/30 02:35
转载请标明出处:
http://blog.csdn.net/zq2114522/article/details/50279639;
本文出自:【梁大盛的博客】
Android编程针对轻量级的像Setting,和一些需要简单存储的数据可以选
择使用SharedPreferences.
SharedPreferences是Android系统提供的种实现轻量级键值对的存储API.实现原理是通过XML文件实现简单的键值对储存.本质上是将XML文件的键值对读取出来保存到哈希表中.更新SharedPreferences以后又会将数据保存到XML文件.主要针对一些数据量不大的存储,毕竟读取XML文件和会写XML文件这写IO操作都是很耗时的.
如果需要存储大量数据还选择使用SharedPreferences那么就适得其反了.大数据就应该选择SQL或者文件操作等等.特别是SharedPreferences每次修改.调用commit()函数以后将哈希表回写到XML文件,即使你只修改一个或者多个其实都是将全部数据重新再回写到XML文件.可以想象如果有大量数据性能上会影响多少呢!
应对轻量数据选择SharedPreferences是一个不错的选择!
贴一个小小的Demo,登录保存帐号密码.
MainActivity.java
package com.example.dsliang.sharedpreferencesdemo;import android.app.Activity;import android.content.Context;import android.content.SharedPreferences;import android.os.Bundle;import android.os.Handler;import android.view.View;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity { EditText mEditId, mEditPassWord; CheckBox mChBoxSave; Button mBtnLogin; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEditId = (EditText) findViewById(R.id.editId); mEditPassWord = (EditText) findViewById(R.id.editPassWord); mChBoxSave = (CheckBox) findViewById(R.id.chBoxSave); mBtnLogin = (Button) findViewById(R.id.btnLogin); mBtnLogin.setOnClickListener(mClickListener); } @Override protected void onResume() { super.onResume(); SharedPreferences preferences = getPreferences(Context.MODE_PRIVATE); mEditId.setText(preferences.getString("Id", "")); mEditPassWord.setText(preferences.getString("PassWord", "")); mChBoxSave.setChecked(preferences.getBoolean("Save", true)); } View.OnClickListener mClickListener = new View.OnClickListener() { @Override public void onClick(View v) { Handler handler; SharedPreferences preferences; SharedPreferences.Editor editor; preferences = getPreferences(Context.MODE_PRIVATE); editor = preferences.edit(); if (mChBoxSave.isChecked()) { editor.putString("Id", mEditId.getText().toString()); editor.putString("PassWord", mEditPassWord.getText().toString()); editor.commit(); } else { editor.remove("Id").remove("PassWord").commit(); } v.setClickable(false); handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "登录成功", Toast.LENGTH_SHORT).show(); finish(); } }, 2000); } };}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" tools:context="com.example.dsliang.sharedpreferencesdemo.MainActivity"> <EditText android:id="@+id/editId" android:layout_width="200dp" android:layout_height="wrap_content" android:gravity="center" android:singleLine="true" /> <EditText android:id="@+id/editPassWord" android:layout_width="200dp" android:inputType="textPassword" android:layout_height="wrap_content" android:gravity="center" android:singleLine="true" /> <CheckBox android:id="@+id/chBoxSave" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="save" /> <Button android:id="@+id/btnLogin" android:text="Login" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
sharedpreferences使用:
1,调用
getPreferences(Context.MODE_PRIVATE);getSharedPreferences("LogContect",Context.MODE_PRIVATE);
两构造函数,第一个默认创建一个XML文件保存数据.第二个使用传递的名字构造XML文件用于保存数据.
Context.MODE_PRIVATE代表模式.一般都是用Context.MODE_PRIVATE代表私有的
(默认在”/data/data/包名/shared_prefs/”目录里面创建XML文件)
2,通过构造函数返回的SharedPreferences类进行操作
通过getString,getInt,getBoolean等等获取保存的数据
例如:
mEditPassWord.setText(preferences.getString("PassWord", "请输入密码"));
通过”PassWord”查找,如果没找到返回”请输入密码”
使用起来很简单.
3,保存数据
SharedPreferences保存数据要使用到Editor类
例如:
SharedPreferences preferences;SharedPreferences.Editor editor;preferences = getPreferences(Context.MODE_PRIVATE);editor = preferences.edit();editor.putString("Id", mEditId.getText().toString());editor.putString("PassWord",mEditPassWord.getText().toString());editor.commit();
获取editor以后通过putString,putBoolean,putInt等插入数据.
记得最后要调用commit()提交.不然是不会生效的.
3,删除数据
可以很简单的通过文件系统删除应用程序生成的XML文件.
但是我喜欢通过editor删除.
editor有一个clear()方法.
getPreferences(Context.MODE_PRIVATE).edit().clear();
这样调用其实是不会将SharedPreferences里面的数据清除.clear()函数只是将editor实例里面的哈希表清空并不是清空SharedPreferences的哈希表.我们怎么处理呢?
正确用法:
getPreferences(Context.MODE_PRIVATE).edit().remove("Id").remove("PassWord").commit();
通过remove()方法,remove方法会插入一个特殊的对象标识要删除对应的项.具体分析源码的时候就一清二楚了!
总结:
在小量数据的情景下,SharedPreferences是一个很好的工具.首先SharedPreferences.但是因为SharedPreferences设计的问题也会导致性能的限制.
SharedPreferences使用
读取数据
getPreferences(Context.MODE_PRIVATE)->
SharedPreferences ->
getString/getInt/getBoolean等
保存数据
getPreferences(Context.MODE_PRIVATE)->
SharedPreferences ->
Editor->
putString/putInt/putBoolean等
commit
参考资料:
[1]:Android 开发范例代码大全(第2版)
- android SharedPreferences使用
- android SharedPreferences 的使用
- Android SharedPreferences的使用
- android中SharedPreferences使用
- Android SharedPreferences的使用
- Android SharedPreferences的使用
- android SharedPreferences的使用
- Android SharedPreferences的使用
- android SharedPreferences 使用
- Android SharedPreferences的使用
- Android SharedPreferences的使用
- android SharedPreferences 的使用
- Android SharedPreferences的使用
- Android SharedPreferences的使用
- android SharedPreferences 使用
- Android SharedPreferences的使用
- Android SharedPreferences的使用
- Android SharedPreferences使用类
- nineoldandroids的使用
- Styling the Action Bar
- P03 (*) 获取列表的第K个元素
- Overlaying the Action Bar
- 杭电BC12.12
- Android SharedPreferences使用
- Starting an Activity(Activity生命周期金字塔模型)
- HTTP状态码
- c++中的参数传递问题
- XListView实现原理讲解及分析
- WM_MEASUREITEM/WM_DRAWITEM/WM_COMPAREITEM/WM_DELETEITEM
- ZListView,一个最强大的刷新、加载、滑动删除的ListView控件(一)
- 数据加载与传输
- [matlab]基础与应用笔记3