[关闭]
@excavator 2015-05-28T20:58:25.000000Z 字数 4705 阅读 2290

Android三种数据存储方式

Android 慕课 数据存储


一.SharedPreferences

SharedPreference:

  • 是一种轻型的数据存储方式
  • 本质是基于XML文件存储key-value键值对数据
  • 通常用于存储一些简单的配置信息
  1. SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。
  2. 实现SharedPreferences存储的步骤如下:

    • 获得SharedPreferences对象
    • 获得SharedPreferences.Editor对象
    • 通过Editor接口的putXxx方法保存key-value对,其中Xxx表示不同的数据类型
    • 通过Editor接口的commit或者apply方法保存key-value对
  1. package com.excavator.datastorage;
  2. import android.app.Activity;
  3. import android.content.SharedPreferences;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.CheckBox;
  7. import android.widget.EditText;
  8. import android.widget.Toast;
  9. public class MainActivity extends Activity {
  10. EditText etUserName, etUserPass;
  11. CheckBox chk;
  12. SharedPreferences pref;
  13. SharedPreferences.Editor editor;
  14. @Override
  15. protected void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.activity_main);
  18. // SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
  19. /* SharedPreferences pref = getSharedPreferences("myPref", MODE_PRIVATE);
  20. SharedPreferences.Editor editor = pref.edit();
  21. editor.putString("name", "张三");
  22. editor.putInt("age", 30);
  23. editor.putLong("time", System.currentTimeMillis());
  24. editor.putBoolean("default", true);
  25. editor.apply();
  26. editor.remove("default");
  27. editor.apply();
  28. System.out.println(pref.getString("name", ""));
  29. System.out.println(pref.getInt("age", 0));*/
  30. initViews();
  31. pref=getSharedPreferences("UserInfo", MODE_PRIVATE);
  32. editor = pref.edit();
  33. String name=pref.getString("userName", "");
  34. if (name==null) {
  35. chk.setChecked(false);
  36. }else {
  37. chk.setChecked(true);
  38. etUserName.setText(name);
  39. }
  40. }
  41. private void initViews() {
  42. etUserName = (EditText) findViewById(R.id.et_userName);
  43. etUserPass = (EditText) findViewById(R.id.et_passWord);
  44. chk = (CheckBox) findViewById(R.id.checkSaveName);
  45. }
  46. public void doClick(View view) {
  47. switch (view.getId()){
  48. case R.id.btn_Login:
  49. String name = etUserName.getText().toString().trim();
  50. String pass = etUserPass.getText().toString().trim();
  51. if ("admin".equals(name)&&"123456".equals(pass)){
  52. if (chk.isChecked()) {
  53. editor.putString("userName", name);
  54. editor.apply();
  55. }else {
  56. editor.remove("userName");
  57. editor.apply();
  58. }
  59. Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_LONG).show();
  60. }else {
  61. Toast.makeText(MainActivity.this, "禁止登录", Toast.LENGTH_LONG).show();
  62. }
  63. break;
  64. default:
  65. break;
  66. }
  67. }
  68. }

二.SQLite



1. 在Android中如何使用SQLite:

2. 数据篇-SQLite

Cursor是Android查询数据后得到的一个管理数据集合的类,正常情况下,如果查询得到的数据量较小时不会有内存问题,而且虚拟机能够最终保证Cursor最终被释放掉。
然而如果Cursor的数据量特别大,特别是如果里面有Blob信息时,应该保证Cursor占用的内存被及时释放掉,而不是等待GC来处理。并且Android明显是倾向于编程者手动的将Cursor close掉,因为在源代码中我们发现,如果等到垃圾回收器来回收时,也就是如>果不手动关闭,系统会报错,会给用户以错误提示。

3. ContentValues

ContentValues:用于存储一组可以被ContentResolver处理的值

  1. ContentValues values=new ContentValues(); //类似HashMap key value
  2. valuse.put("name","Jack");
  3. 执行对应的SQL操作

4. SQLiteOpenHelper

三.文件存储

Android中 文件存储的操作:

  • Activity的openFileOutput()方法可以用于把数据保存到文件中
  • 创建的文件保存在/data/data//files目录
  • 实现过程与在Java中保存数据到文件中一样

文件的模式:

Android中有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userId,当该应用要去访问其他资源比如文件的时候,就需要userId匹配。默认情况下,任何应用创建的文件,SharedPreferences,数据库都应该是私有的(位于/data/data//files),其他程序无法访问。除非在创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE,只有这样其他程序才能正确访问。

在此输入正文

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注