Android关于保存数据(Saving data)

1.SharedPreferences(key-value)

  SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此保存的数据主要是简单类型的键值对(key-value),它保存的是一个XML文件。

  (1)创建sharedPreferences的两种方法:getSharedPreferences(String name, int mode)----如果你需要通过一个标识(name)来区分不同的sharedPreferences文件

                       getPreferences(int mode)            ----如果在一个activity中只需要使用一个sharedPreferences,不需要区分      

     mode:是指定读写方式,其值有三种,分别为:

              Context.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序读、写

              Context.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他应用程序读,但不能写

              Context.MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读写。

  (2)编辑sharedPreferences    

方法名称

描述

public abstract boolean contains (String key)                                        

判断SharedPreferences是否包含特定key的数据

public abstract SharedPreferences.Editor edit ()

   返回一个Edit对象用于操作SharedPreferences

public abstract Map<String, ?> getAll ()

获取SharedPreferences数据里全部的key-value对

getXXX(String key,XXX defvlaue)

获取SharedPreferences数据指定key所对应的value,如果该key不存在,返回默认值defValue。其中XXX可以是boolean、float、int、long、String等基本类型的值

  (3)写入数据和读取数据

方法名称 描述

public abstract SharedPreferences.Editor clear ()              

清空SharedPreferences里所有的数据

public abstract boolean commit ()

当Editor编辑完成后,调用该方法可以提交修改,而且必须要调用这个数据才修改

public abstract SharedPreferences.Editor putXXX (String key, typexxx XXX)

向SharedPreferences存入指定的key对应的数据,其中XXX可以是boolean、float、int、long、String等基本类型的值

public abstract SharedPreferences.Editor getXXX (String key, typexxx XXX)

取出向SharedPreferences存入指定的key对应的数据,其中XXX可以是boolean、float、int、long、String等基本类型的值

public abstract SharedPreferences.Editor remove (String key)

删除SharedPreferences里指定key对应的数据项

2.Saving files

  所有的Andr??oid设备有两个文件存储区:“内部”和“外部”存储。外部存储主要是SD卡;

  内部存储区域:总是可用,并且之辈自己的应用程序访问;

  外部存储设备:不总是可用,被用户或者一些软件挂在后便不可使用,这是世界可读的,所以在这里保存的文件可能会之外的控制读取。外部存储是不需要访问限制文件和要与其他应用程序共享或允许用户用电脑访问文件的最佳场所;

  (1)设置你的应用获得外部存储的权限(读和写)

<manifest ...>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    ...
</manifest>
<manifest ...>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    ...
</manifest>

  将文件存储在内部存储区域不需要设置任何权限  

  (2)将文件保存在内部存储区域

    获得内部存储文件目录的两个方法:

    getFilesDir():返回表示你的应用程序内部的目录文件。

    getCacheDir():返回表示你的应用程序的临时缓存文件内部目录中的文件

  创建非缓存目录文件方法:

File file = new File(context.getFilesDir(), filename);
String filename = "myfile";
String string = "Hello world!";
FileOutputStream outputStream;

try {
  outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
  outputStream.write(string.getBytes());
  outputStream.close();
} catch (Exception e) {
  e.printStackTrace();
}

  创建缓存目录下文件方法:

public File getTempFile(Context context, String url) {
    File file;
    try {
        String fileName = Uri.parse(url).getLastPathSegment();
        file = File.createTempFile(fileName, null, context.getCacheDir());
    catch (IOException e) {
        // Error while creating file
    }
    return file;
}

  (3)将文件保存在外部存储区域

    由于外部存储设备可能出现不能获取的情况 例如没有或者被挂载,因此在使用之前必须要检测是否可用,使用方法getExternalStorageState() 如果得到的值等于 MEDIA_MOUNTED,则表示外部存储设备是可使用的;

/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state) ||
        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        return true;
    }
    return false;
}

  

    

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。