• android 存储


    总共四种:SharedPreferences,文件存储,SQLite数据库,ContentProvider,网络存储

     

    1.sharedPreferences:适合存储少量数据,而且存取的格式简单,采用Map数据结构来存储数据,以键值对的形式存储

    存储文件到:/data/data/<package-name>/shared-prefs

    注意:只能在同一个包内使用

    2.文件存储:可以存储大量的数据,但是更新数据困难,存取类型复杂的数据时,需要让实体类实现Serializable接口(不能是Parcelabel接口),

    存储文件到:/data/data/<package-name>/files或者是任意路径下

    3. SQLite数据库:专为嵌入式设备设计的轻型数据库,只有五种数据类型,分别是:
    NULL: 空值
    INTEGER: 整数
    REAL: 浮点数
    TEXT: 字符串
    BLOB: 二进制数据

    存储文件到:/data/data/<package-name>/database

    4. ContentProvider: Android系统中能实现所有应用程序共享的一种数据存储方式

    5. 网络存储 网络存储方式,需要与Android 网络数据包打交道

     

     

     

    SharedPreferences 

    存:

    SharedPreferences sharedPreferences =getShardPreference(filename,Mode);//filename 文件名称,不用加后缀.xml,系统会自动添加

    SharedPreferences.Editor editor=sharePreferences.edit();  //获取eidtor对象

    editor.putString("name","zhangxiao");//写入数据

    editor.commit();//提交数据

    取:

    SharedPreferences sharedPreferences=getSharedPreferences(filename,Mode);

    sharedPreferences.getString("name",defaultValue);//第二个参数是默认值

     

    文件存储

    存:

    FileOutputStream fos=openFileOutput(filename,Mode);    文件存储在/data/data/package-name/files下,filename不可以包含“/”,该文件只可以被该APP访问 ;

    Mode包含4种:
    Context.MODE_PRIVATE          //文件只能被本应用使用,新建模式
    Context.MODE_APPEND           //追加模式
    Context.MODE_WORLD_READABLE   //可以被其他应用读取
    Context.MODE_WORLD_WRITEABLE  //可以被其他应用写入

    或者是File file=new File(Environment.getStroageDictionary().getAbsolutePath()+"/filename");  文件存储在filename里,可以是任意路径,filename可以包含任意字符;要在AndroidManifest中添加权限

    FileOutputStream fos=new FileOutputStream(file);

    ObjectOutputStream oos=new ObjectOutputStream(fos);

    oos.writeObject(list);

    注意:使用完后记得关闭---fos.close();      oos.close();

    取:

    FileInputStream fis=openFileInput(filename);

    或者是File file=new File(..同上..);

    FileInputStream fis=new FileInputStream(file);

    ObjectInputStream ois=new ObjectInputStream(fis);

    List <***> list=(ArrayList<***>)ois.readObject();

    注意:使用完以后记得关闭---fis.close();      ois.close();

     

    SQLite数据库

    具体内容见SQLite数据库详析

    ContentProvider

    一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制。并且此种方式忽略了底层的数据存储实现,ContentProvider提供了一种统一的通过Uri实现数据操作的方式。其步骤为:
      1. 在当前应用程序中定义一个ContentProvider。
      2. 在当前应用程序的AndroidManifest.xml中注册此ContentProvider,其中authorities属性定义了此ContentProvider的Uri标识。
    <provider android:name=".MyProvider" android:authorities="com.test.MyProvider"/>
      3. 其他应用程序通过ContentResolver和Uri来获取此ContentProvider的数据。
    ContentResolver提供了诸如insert(), delete(), query()和update()之类的方法。用于实现对ContentProvider中数据的存取操作。

     

    Uri是一个通用资源标志符,将其分为A,B,C,D 4个部分:
    A:无法改变的标准前缀,包括;"content://"、"tel://"等。当前缀是"content://"时,说明通过一个Content Provider控制这些数据 
    B:URI的标识,它通过authorities属性声明,用于定义了是哪 个ContentProvider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的类名。例 如:"content://com.test.data.myprovider" 
    C:路径,可以近似的理解为需要操作的数据库中表的名字,如:"content://hx.android.text.myprovider/name"中的name
    D:如果URI中包含表示需要获取的记录的ID;则就返回该id对应的数据,如果没有ID,就表示返回全部;

    /获取ContentResolver对象
    ContentResolver resolver = ctx.getContentResolver();
    //获取Uri对象
    Uri uri = Uri.parse("content://com.test.MyProvider");
    //获取数据
    Cursor c = resolver.query(uri, null, null, null, null);

    c.moveToFirst();
    for(int i=0; i<c.getCount(); i++){
    int index = c.getColumnIndexOrThrow("name");
    String src = c.getString(index);
    Log.d("Debug", src);
    c.moveToNext();

     

  • 相关阅读:
    源码
    Leetcode 230. 二叉搜索树中第K小的元素 中序遍历
    Leetcode 160. 相交链表 哈希 链表
    Leetcode 142. 环形链表 II
    Leetcode 217. 存在重复元素 哈希 排序
    asp.mvc2.0资料
    关于CRM的介绍
    WPf控件模板缺省样式
    皮肤制作工具
    关于linq的用法
  • 原文地址:https://www.cnblogs.com/zhy7104/p/5813080.html
Copyright © 2020-2023  润新知