Android数据存储方式操作模式解析

目录
  • SharedPreferences
    • 基本用法
    • 操作模式
  • ContentProvider
    • 基本概念
    • 统一资源标识符(URI)
    • 基本使用
  • 文件存储
    • 基本使用
  • 总结

SharedPreferences

在开发过程中,数据存取是较为频繁的,今天我们来了解下android几种常见的数据存取方式。

在Android中,sharePreferences是一种轻量级的数据存储方式,采用键值对的存储方式,存储少量数据,支持基本类型的简单数据存储。

基本用法

  • 根据Context获取SharedPreferences对象
  • 利用edit()方法获取Editor对象。
  • 通过Editor对象存储key-value键值对数据。
  • 通过commit()方法提交数据。
public class MainActivity extends Activity {
     @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //获取SharedPreferences对象
        Context ctx = MainActivity.this;
        //第一个参数指定存储文件名,第二个参数指定操作模式
        SharedPreferences sp = ctx.getSharedPreferences("SP", MODE_PRIVATE);
        //存入数据
        Editor editor = sp.edit();
        editor.putString("STRING_KEY", "string");
        editor.putInt("INT_KEY", 0);
        editor.putBoolean("BOOLEAN_KEY", true);
        editor.commit();
        //返回STRING_KEY的值 设定默认值
        Log.d("SP", sp.getString("STRING_KEY", "none"));
        //如果NOT_EXIST不存在,则返回值为"none"
        Log.d("SP", sp.getString("NOT_EXIST", "none"));
        //删除指定数据
        editor.remove("STRING_KEY");
        editor.commit();
        //清空数据
        editor.clear();
        editor.commit();
     }
}

操作模式

  • MODE_PRIVATE 指定该SharedPreferences数据只能被本应用程序读、写。这是默认模式
  • MODE_APPEND 该模式会检查文件是否存在,存在就将数据写到文件末尾,否则就创建新文件。
  • MODE_WORLD_READABLE指定该SharedPreferences数据能被其他应用程序读,但不能写。该模式已弃用
  • MODE_WORLD_WRITEABLE指定该SharedPreferences数据能被其他应用程序写。该模式已弃用

ContentProvider

基本概念

属于Android四大组件之一,用于进程间进行数据交互,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。简单来说,一个程序可以通过实现一个Content Provider的抽象接口将自己的数据暴露出去。外界根本看不到,也不用看到这个应用暴露的数据在应用当中是如何存储的,或者是用数据库存储还是用文件存储,还是通过网上获得。

统一资源标识符(URI)

content://com.example.myapplication.provider/tablename/1
  • content 主题名,URI前缀。
  • com.example.myapplication.provider 授权信息,Content Provider唯一标识符。
  • tablename Content Provider 指向数据库中的某个表名。
  • 1 表中某个记录,若无指定,返回全部记录。

基本使用

创建Content Provider

  • 创建一个继承了ContentProvider父类的类
  • 定义一个名为CONTENT_URI,并且是public static final的Uri类型的类变量,必须为其指定一个唯一的字符串值,最好的方案是以类的全名称。
  • 创建数据存储系统。大多数Content Provider使用Android文件系统SQLite数据库来保持数据,但是也可以以任何你想要的方式来存储。但是,必须为其定义一个叫_id的列,它用来表示每条记录的唯一性。

示例代码(存储用户名称并显示用户名称,使用SQLite)

public class MyUsers {
    public static final String AUTHORITY  = “com.wissen.MyContentProvider”;
    // BaseColumn类中已经包含了 _id字段
    public static final class User implements BaseColumns {
    public static final Uri CONTENT_URI  = Uri.parse(content://com.example.MyContentProvider”);
     // 表数据列
     public static final String  USER_NAME  = “USER_NAME”;
    }
}

如上代码定义了Content Provider的Content_URI和数据列,然后再基于此定义Content Provider类。

package com.wissen.testApp.android;
public class MyContentProvider extends ContentProvider {
    private SQLiteDatabase sqlDB;
    private DatabaseHelper dbHelper;
    private static final String  DATABASE_NAME = “Users.db”;
    private static final int DATABASE_VERSION  = 1;
    private static final String TABLE_NAME   = “User”;
    private static final String TAG = “MyContentProvider”;
    //定义SQLite接口
    private static class DatabaseHelper extends SQLiteOpenHelper {
        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
        @Override
        public void onCreate(SQLiteDatabase db) {
        //创建用于存储数据的表
        db.execSQL(”Create table ” + TABLE_NAME + “( _id INTEGER PRIMARY KEY AUTOINCREMENT, USER_NAME TEXT);”);
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL(”DROP TABLE IF EXISTS ” + TABLE_NAME);
            onCreate(db);
        }
    }
    @Override
    public int delete(Uri uri, String s, String[] as) {
        return 0;
    }
    @Override
    public String getType(Uri uri) {
        return null;
    }
    @Override
    public Uri insert(Uri uri, ContentValues contentvalues) {
        sqlDB = dbHelper.getWritableDatabase();
        long rowId = sqlDB.insert(TABLE_NAME, “”, contentvalues);
        if (rowId > 0) {
            Uri rowUri = ContentUris.appendId(MyUsers.User.CONTENT_URI.buildUpon(), rowId).build();
            getContext().getContentResolver().notifyChange(rowUri, null);
            return rowUri;
        }
        throw new SQLException(”Failed to insert row into ” + uri);
    }
    @Override
    public boolean onCreate() {
        dbHelper = new DatabaseHelper(getContext());
        return (dbHelper == null) ? false : true;
    }
    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
        SQLiteDatabase db = dbHelper.getReadableDatabase();
        qb.setTables(TABLE_NAME);
        Cursor c = qb.query(db, projection, selection, null, null, null, sortOrder);
        c.setNotificationUri(getContext().getContentResolver(), uri);
        return c;
    }
    @Override
    public int update(Uri uri, ContentValues contentvalues, String s, String[] as) {
        return 0;
    }
}

如上所示,我们封装了SQLite操作于Content Provider,是我们可以不再关注数据源的操作细节,而直接使用Content Provider进行数据的存取。

文件存储

Android文件存储可以用来存放大量数据,如文本、图片、音频等。使用方法类似于java文件存储。

基本使用

文件写入

public void save() {
        try {
            FileOutputStream outStream=this.openFileOutput("a.txt",Context.MODE_WORLD_READABLE)
            outStream.write(text.getText().toString().getBytes());
            outStream.close();
            //成功消息提示
            Toast.makeText(MyActivity.this,"Saved",Toast.LENGTH_LONG).show();
        } catch (Exception e) {
            e.printStackTrace();
        }
 }

写入文件若不存在,则会创建一个新的文件,保存在/data/data/files文件目录下。

文件读取

public void load()
{
    try {
        FileInputStream inStream=this.openFileInput("a.txt");
        ByteArrayOutputStream stream=new ByteArrayOutputStream();
        //分块读取
        byte[] buffer=new byte[1024];
        int length=-1;
    while((length=inStream.read(buffer))!=-1)   {
            stream.write(buffer,0,length);
        }
        stream.close();
        inStream.close();
        text.setText(stream.toString());
        Toast.makeText(MyActivity.this,"Loaded",Toast.LENGTH_LONG).show();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

总结

本文简单介绍了Android几个简单的数据存储方式,包括简单数据存取,文件存储,以及如何封装Content Provider,更多关于Android数据存储操作模式的资料请关注我们其它相关文章!

(0)

相关推荐

  • 详解Android数据存储—使用SQLite数据库

    SQLite是Android自带的关系型数据库,是一个基于文件的轻量级数据库.Android提供了3种操作数据的方式,SharedPreference(共享首选项).文件存储以及SQLite数据库. SQLite数据库文件被保存在/data/data/package_name/databases目录下. 一.创建和删除表 1.创建表 创建表的SQL语句为: CREATE TABLE userInfo_brief ( id INTEGER PRIMARY KEY AUTOINCREMENT, na

  • Android SharedPreferences实现数据存储功能

    除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,不同于文件的存储方式,SharedPreferences是使用键值对(key-value)数据的方式来存储数据的.而且SharedPreferences还支持多种不同的数据类型存储,因此,使用SharedPreferences来进行数据持久化要比使用文件方便很多,下面我们就来看一下它的具体用法吧. 如何将数据存储到SharedPreferences中 要想使用SharedPreferences来存储数据,首先

  • Android基础教程数据存储之文件存储

    Android基础教程数据存储之文件存储 将数据存储到文件中并读取数据 1.新建FilePersistenceTest项目,并修改activity_main.xml中的代码,如下:(只加入了EditText,用于输入文本内容,不管输入什么按下back键就丢失,我们要做的是数据被回收之前,将它存储在文件中) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="

  • android studio数据存储建立SQLite数据库实现增删查改

    实验目的: 分别使用sqlite3工具和Android代码的方式建立SQLite数据库.在完成建立数据库的工作后,编程实现基本的数据库操作功能,包括数据的添加.删除和更新. 实验要求: 1.创建一个学生管理的应用,基本信息包含学生姓名,班级,学号.采用数据库存储这些信息. 2.应用应该至少包含信息录入和删除功能. 3.数据显示考虑采用ListView. 实验效果: 工程结构: 源代码: DBAdapter.java package com.example.shiyan6_sqlite; impo

  • Android 通过SQLite数据库实现数据存储管理

    0 实验环境 在Android Studio中进行有关代码的编写和界面效果展示. SQLite数据库的图形化工具SQLiteStudio 下载网址:SQLiteStudio官网 1 界面展示 2 功能说明 (1)需实现一个应用可供用户进行数据的录入存储 (2)能实现基础CRUD操作,对数据进行的删.查.改等操作 (3)同时要有输入栏和结果的展示. 3 设计原理 SQLiteOpenHelper 是Android 提供的一个抽象工具类,负责管理数据库的创建.升级工作.如果我们想创建数据库,就需要自

  • Android四种数据存储的应用方式

    Android四种数据存储的应用方式 作为一个完整的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.文件存储.SQLite. Content Provider.对这几种方式的不同和应用场景整理如下. 第一种: 使用SharedPreferences存储数据 适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型.基本类型的值.比如应用程序的各种配置信息(如是否打开音效.是否使用震动效果.小游戏的玩家积分等),解

  • Android数据存储方式操作模式解析

    目录 SharedPreferences 基本用法 操作模式 ContentProvider 基本概念 统一资源标识符(URI) 基本使用 文件存储 基本使用 总结 SharedPreferences 在开发过程中,数据存取是较为频繁的,今天我们来了解下android几种常见的数据存取方式. 在Android中,sharePreferences是一种轻量级的数据存储方式,采用键值对的存储方式,存储少量数据,支持基本类型的简单数据存储. 基本用法 根据Context获取SharedPreferen

  • 5种Android数据存储方式汇总

    本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面将为大家一一详细介绍. 第一种:使用SharedPreferences存储数据 SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比

  • 四种Android数据存储方式

    Android提供以下四种存储方式: SharePreference SQLite File ContentProvider Android系统中数据基本都是私有的,一般存放在"data/data/程序包名"目录下.如果要实现数据共享,正确的方式是使用ContentProvider. SharedPreference SharedPreference是一种轻型的数据存储方式,实际上是基于XML文件存储的"key-value"键值对数据.通常用来存储程序的一些配置信息

  • Android 数据存储方式有哪几种

    以下内容给大家介绍Android数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 本文主要介绍如何使用文件来存储数据.Android文件操作用到的是Java.IO中的FileOutputStream和FileInputStream类. 一.存储文件 首先实例化一个FileOutputStream. FileOutputStream foStream = openFileOutput(fileN

  • Android编程中的5种数据存储方式

    本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据 2 文件存储数据      3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面详细讲解这五种方式的特点 第一种: 使用SharedPreferences存储数据 适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型.基本类型的值.比如应用程序的各种配置信息(如是否打开音效.是否使用震动效果.小游戏的玩家积分等),解锁口 令密

  • Android开发笔记之: 数据存储方式详解

    无论是神马平台,神马开发环境,神马软件程序,数据都是核心.对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用.总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式:数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等:网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络

  • android数据存储之文件存储方法

    文件存储是 Android 中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动的保存到文件当中的. 概述 文件存取的核心就是输入流和输出流. Android文件的操作模式 文件的相关操作方法 文件读写的实现 openFileOutput和openFileInput方法 /** * openFIleOutput ,openFileInput * 这两种方法同sp一样只能讲文件保存到手机内存固定的路径中, * 默认为 /data/data/<packageName

  • Android 数据存储之 FileInputStream 工具类及FileInputStream类的使用

    安卓的三种本地的典型数据存储方式 SharedPreferences 以文件格式保存在本地存储中 SQL数据库 这篇文章就是讲解一下如何使用 SharedPreferences 保存文件.主要解释什么都写在注释里面的. IDE : Android Studio 参考文章:http://www.jb51.net/article/74215.htm 絮叨一下:本来文件操作这一块上周就想把其弄懂,然后继续进一步的学习.但是因为官方的 Android Training 之中的概念太过于繁杂.导致我认为存

  • Android文件存储SharedPreferences源码解析

    1.我们都知道SharedPreferences 是android可以用来存放key value的的文件. SharedPreferences sp = getSharedPreferences("fileName", Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.putString("key","value"); editor.commit(

  • C语言 数据存储方式知识点详解

    C语言 数据存储方式 一.源码 一个数的原码(原始的二进制码)有如下特点: 最高位做为符号位,0表示正,为1表示负 其它数值部分就是数值本身绝对值的二进制数 负数的原码是在其绝对值的基础上,最高位变为1 下面数值以1字节的大小描述: 十进制数 原码 +15 0000 1111 -15 1000 1111 +0 0000 0000 -0 1000 0000 注:原码表示法简单易懂,与带符号数本身转换方便,只要符号还原即可,但当两个正数相减或不同符号数相加时,必须比较两个数哪个绝对值大,才能决定谁减

随机推荐