【Android基础】数据存储

android数据存储主要有三种方式:文件存储、SharedPreferences存储、SQLite数据库存储
一、文件存储
  1. 写数据:Context类的openFileOutput(String fileName,int authority)方法。
    参数说明:
    a、fileName:文件名。不可以包含路路径,因为使用的是默认路路径/data/data/files/目录下。
    b、authority:权限。主要有两种模式可选——MODE_PRIVATE和MODE_APPEND,其他模式因为安全性,在Android4.2后已经废弃。private模式是覆盖擦写模式,append模式是追加内容模式, append模式在没有文件时会创建新文件,private模式则待验证。

  2、读数据:Context类的openFileInput(fileName)方法。

    参数说明:

    a、fileName:要读取数据的文件名。不可以包含路路径,因为使用的是默认路路径/data/data/files/目录下。

  3、使用示例:

 1 //数据直接写
 2     public static void originalWriteData(String filename, String data, Activity activity) {
 3         FileOutputStream fileOutputStream = null;
 4         BufferedWriter bufferedWriter = null;
 5         try {
 6             //构建数据传输通路
 7             fileOutputStream = activity.openFileOutput(filename, Context.MODE_PRIVATE);
 8             bufferedWriter = new BufferedWriter(new OutputStreamWriter(fileOutputStream));
 9             //写入数据
10             bufferedWriter.write(data);
11         } catch (Exception e) {
12             //会抛出异常,比如找不到文件异常 java.io.FileNotFoundException
13             e.printStackTrace();
14         } finally {
15             try {
16                 //用完记得关闭数据通路
17                 if (bufferedWriter != null) {
18                     bufferedWriter.close();
19                 }
20             } catch (Exception e) {
21                 e.printStackTrace();
22             }
23         }
24     }
25 
26     //数据直接读方法
27     public static String originalReadData(String filename, Activity activity) {
28         FileInputStream fileInputStream = null;
29         BufferedReader bufferedReader = null;
30         //StringBuilder是字符串变量,执行速度最快,但是线程不安全,StringBuffer线程安全,速度稍慢
31         StringBuilder dataBuilder = new StringBuilder();
32         try {
33             //构建数据传输通路
34             fileInputStream = activity.openFileInput(filename);
35             bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
36             //读取数据,String是字符串常量,速度最慢
37             String line = "";
38             while ((line = bufferedReader.readLine()) != null) {
39                 dataBuilder.append(line);
40             }
41         } catch (Exception e) {
42             e.printStackTrace();
43         } finally {
44             try {
45                 if (bufferedReader != null) {
46                     //关闭数据通路
47                     bufferedReader.close();
48                 }
49             } catch (Exception e) {
50                 e.printStackTrace();
51             }
52         }
53         //返回读取到的数据
54         return dataBuilder.toString();
55     }

 二、SharedPreferences存储

   1、写数据:

    通过以下三种方式可获得SharePreferences对象:

    (1)、Context类中的getSharedPreferences(String fileName,int authority)方法。

      参数说明:

      a、fileName:文件名。默认存放在/data/data//shared_prefs/目录下,指定文件不存在则新建一个。

      b、authority:操作权限。只有MODE_PRIVATE一种模式可选,表示只有当前程序才可以这个SharedPreferences文件进行读写,其他模式分别在4.2和6.0中废弃。

    (2)、Activity类中的getPreferences(int authority)方法。

      参数说明:

      a、authority:操作权限。自动将当前Activity的类名作为SharedPreferences文件的文件名。

    (3)、PreferenceManager类中的getDefaultSharedPreferences(Context context)静态方法。

      参数说明:

      a、context:上下文环境。自动将当前程序的包名作为前缀来命名SharedPreferences文件。

    使用步骤:

    (1)、使用SharePreferences对象的edit()方法获取SharedPreferences.Editor对象。

    (2)、向SharedPreferences.Editor对象中添加数据,比如使用putBoolean(String key,boolean boo)方法。

    (3)、使用apply()方法提交数据,完成操作。

  2、读数据:

    使用SharedPreferences对象中与put方法相对应的一系列的get方法,即可读出数据。

    参数说明:

    a、key:键值。与对应put方法中的key要一致。

    b、defaultValue:默认值。代表找不到键值的对应值时,返回的默认数据。

  3、使用示例:

//使用SharedPreference写String数据——getSharedPreferences()
    public static void SPWriteString(String filename, String key, String data, Activity activity) {
        //getSharedPreferences是Context类的方法,MODE_PRIVATE是覆盖擦写
        SharedPreferences.Editor editor = activity.getSharedPreferences(filename, Context.MODE_PRIVATE).edit();
        //向editor对象添加数据
        editor.putString(key, data);
        //提交数据到文件
        editor.apply();
    }

    //使用SharedPreference读String数据——getSharedPreferences()
    public static String SPReadString(String filename, String key, Activity activity) {
        //获得SharedPreferences对象
        SharedPreferences sharedPreferences = activity.getSharedPreferences(filename, Context.MODE_PRIVATE);
        //根据key键读取数据,设置无数据的默认返回值
        String data = sharedPreferences.getString(key, "there is not data!");
        return data;
    }

    //使用SharedPreference写String数据——getPreferences()
    public static void SPWriteString_P(String key, String data, Activity activity) {
        //getPreferences()自动将当前活动的类名作为文件名,所以不接收文件名参数
        SharedPreferences.Editor editor = activity.getPreferences(Context.MODE_PRIVATE).edit();
        editor.putString(key, data);
        editor.apply();
    }

    //使用SharedPreference写String数据——getPreferences()
    public static void SPwriteString_D(String key, String data, Activity activity) {
        //使用PreferenceManager类的静态方法getDefaultSharedPreferences来构建Editor对象,文件名是应用程序包名
        SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(activity).edit();
        editor.putString(key, data);
        editor.apply();
    }

三、SQLite数据库

  1、SQLite数据库有一个帮助类叫SQLiteOpenHelper,借助这个类,可以很简单的创建和升级数据库。

  2、SQLiteOpenHelper帮助类是一个抽象类,我们要使用它,须新建一个自己的帮助类去继承它,并实现它的两个抽象方法onCreate()方法和onUpgrade()方法。

  3、SQLiteOpenHelper两个重要的实例方法:

    a、getReadableDataBase():创建或打开一个数据库(不存在则新建),返回一个可对数据库进行读写操作的对象,当数据库不可写入时(如磁盘空间已满),返回的对象将以只读的形式打开。

    b、getWritableDataBase():创建或打开一个数据库(不存在则新建),返回一个可对数据库进行读写操作的对象,当数据库不可写入时(如磁盘空间已满),将抛出异常。

  4、SQLiteOpenHelper可重写的两个构造方法:

    (1)、SQLiteOpenHelper(Context context,String dataBaseName,Cursor cursor,String version);

    参数说明:

      a、context:上下文环境。

      b、dataBaseName:数据库名称。

      c、cursor:自定义cursor,一般传入null。

      d、version:版本号;

    (2)、一般只用第一种构造方法。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    

      

 

转载于:https://www.cnblogs.com/Hystudio-lzu/p/6798962.html

你可能感兴趣的:(【Android基础】数据存储)