下面将介绍下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. */ @Override public 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() { @Override public void onClick(View v) { SharedPreferences pres = SharedPreferencesActivity.this. // 注1 getSharedPreferences(SETTING, Context.MODE_PRIVATE); switch (v.getId()) { // 保存数据 case R.id.btnSave: Editor editor = pres.edit(); // 注2 editor.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"); // 注3 int 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. // 注1 getSharedPreferences(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(),就不会出现这样问题。。。。
有问题请留言。。。。。