Android持久化的学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ruger008/article/details/88936452

文件存储

openFileOutput()方法

两个参数:

  1. 文件名(不可包含路径,默认为 /data/data/包名/files/

  2. 操作模式(MODE_APPEND,MODE_PRIVATE)

    MODE_PRIVATE(默认):覆盖写入

    MODE_APPEND:追加

返回值:

​ FileOutputStream对象,使用Java流将数据写入到文件

例子:

public void save() {
    String data = "Data to save";
    FileOutputStream out = null;
    BufferedWriter writer = null;
    try {
        out = openFileOutput("data", Context.MODE_PRIVATE);
        writer = new BufferedWritter(new OutputStreamWriter(out));
        writer.write(data);
    } catch (IOExpection e) {
        e.printStackTrace();
    } finally {
        try {
            if (writer != null) {
                writer.close();
            } catch (IOExpection e) {
                e.printStackTrace();
            }
        }
    }
}

openFileInput()方法

一个参数:

  1. 读取的文件名

    系统到 /data/data/包名/files/ 目录下加载文件

返回值:

​ FileInputStream对象,使用Java流将文件数据读取出来。

public String load() {
    FileInputStream in = null;
    BufferedReader reader = null;
    StringBuilder content = new StringBuilder();
    try {
        in = openFileInput("data");
        reader = new BufferedReader(new OutputStreamReader(in));
       Sring line = "";
       while ((line = reader.readLine()) != null){
           content.append(line);
       }
    } catch (IOExpection e) {
        e.printStackTrace();
    } finally {
        try {
            if (reader != null) {
                reader.close();
            } catch (IOExpection e) {
                e.printStackTrace();
            }
        }
    }
    return content.toString();
}

一般使用TextUtils.isEmpty()方法来判断字符串是否为空,这个方法当传入字符串等于null或者等于空字符串的时候,都会返回true,不需要逻辑运算符连接两种情况。

SharedPreferences存储

键值对存储数据,通过键把对应值取出。

获取SharedPreferences对象有三种方法:

Context类的getSharedPreferences()方法

两个参数:

  1. 文件名(存放于/data/datga/包名/shared_prefs/)
  2. 操作模式(只有MODE_PRIVATE可选)

Activity类的getPreferences()方法

默认将当前活动类名作为SharedPreferences的文件名

一个参数:

  1. 操作模式

PreferenceManager类的getDefaultSharedPreferences()方法

静态方法,只接收Context参数,以当前应用程序包名作为前缀来命名SharedPreferences文件。

存储数据步骤:

  1. 调用SharedPreferences对象的edit()方法获取SharedPreferences.Editor对象

  2. 向SharedPreferences.Editor对象添加数据

    添加布尔型:putBoolean(x)

    添加字符串:putStirng(x)

  3. 调用apply()提交数据,完成数据存储操作

例子:

public class MainActivity extends AppCompatActivity {
	@Override
    protected void onCreate(Bundle saveInstanceState) {
        super.onCreate(saveInstanceState);
        setContentView(R.layout.activity_main);
        Button saveData = (Button) findViewById(R.id.save_data);
        save_data.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
                editor.putString("name", "Tom");
                editor.putInt("age", 28);
                editor.putBoolean("married", false);
                editor.apply();
            }
        })
    }
}

从SharedPreferences中读取数据

SharedPreferences对象中提供了一系列的get方法,每种get方法对应了一种put方法。

getString(键, 默认的值)、getBoolean(键,默认的值)


SQLite 数据库

Android系统内置的数据库,运算速度快,占用资源少。

不仅支持SQL语法、还遵循ACID事务。

SharedPreferences存储只适合保存一些简单的数据和键值对。

SQLiteOpenHelper帮助抽象类

自己创建帮助类去实现onCreate()和onUpgrade()接口去对创建、升级数据库的逻辑

两个重要实例方法:

​ getReadableDatabase(); 只读方式打开数据库

​ getWritableDatabase(); 可读可写的方式打开数据库

如果数据库不存在则创建、存在则打开

两个重要的构造函数可重写,一般使用参数少的构造函数

四个参数:Context、数据库名、查询数据返回的Cursor、数据库版本

数据库文件存放在 /data/data/包名/database/

实例化一个SQLiteOpenHelper对象之后调用他的getReadableDatabase()方法创建数据库,此时重写的onCreate方法会执行。

public class MyDatabaseHelper extends SQLiteOpenHelper {
    public static final String CREATE_BOOK = "create table Book ("
        + "id integer primary key autoincrement"
        + "author text"
        + "price real"
        + "pages integer"
        + "name text)";
    private Context mContext;
    public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        mContext = context;
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.exeSQL(CREATE_BOOK);
        Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}

猜你喜欢

转载自blog.csdn.net/Ruger008/article/details/88936452