zoukankan      html  css  js  c++  java
  • Android学习笔记七:五大存储

        在Android中,可供选择的存储方式有SharedPreferences、文件存储、SQLite数据库方式、内容提供器(Content provider)和网络。

        一.SharedPreferences方式

            Android提供用来存储一些简单的配置信息的一种机制,例如,一些默认欢迎语、登录的用户名和密码等。其以键值对的方式存储,使得我们可以很方便的读取和存入.

    //保存数据
    SharedPreferences settings = getSharedPreferences(SETTING_INFOS, 0); //首先获取一个SharedPreferences对象   
            settings.edit()   
                    .putString(NAME, field_name.getText().toString())   
                    .putString(PASSWORD, filed_pass.getText().toString())   
                    .commit();   
        } //将用户名和密码保存进去   
    //取出数据
    SharedPreferences settings = getSharedPreferences(SETTING_INFOS, 0); //获取一个SharedPreferences对象   
            String name = settings.getString(NAME, "");  //取出保存的NAME   
            String password = settings.getString(PASSWORD, ""); //取出保存的PASSWORD   

         SharedPreferences是以XML的格式以文件的方式自动保存的,在DDMS中的File Explorer中展开到/data/data/<packagename>/shared_prefs下。

        二.文件存储方式

           在Android中,其提供了openFileInput 和 openFileOuput 方法读取设备上的文件: 
                 String FILE_NAME = "tempfile.tmp";  //要操作文件的文件名

                 //创建文件读写流,后面进行读写操作
                 FileOutputStream fos = openFileOutput(FILE_NAME, Context.MODE_APPEND); 
                 FileInputStream fis = openFileInput(FILE_NAME); 

           上述两方法只支持读取该应用目录下的文件,读取非其自身目录下的文件将会抛出异常。

        三.SQLite数据库方式

          SQLite是Android所带的一个标准的数据库,它支持SQL语句,它是一个轻量级的嵌入式数据库。

          使用SQLite时,主要有两步:

          1:继承SQLiteOpenHelper,创建一个SQLiteOpenHelper子类,并重写其onCreate()、onUpgrade()、onOpen()方法,在其构造函数中创建数据库并控制版本,在onCreate()生成一个数据库表。

          2:在外部java代码中,通过

    mOpenHelper = new DatabaseHelper(this);  
    SQLiteDatabase db = mOpenHelper.getWritableDatabase(); //当在程序通过mOpenHelper.getWritableDatabase()或者mOpenHelper.getReadableDatabase()方法的时候,如果当时没有数据库,那么Android系统就会自动生成一个数据库,如果有,则返回这个数据库实例。

          获取到一个SQLiteDatabase实例,然后通过该实例来调用sqlite数据库的增删查改操作。

    db.execSQL(sql);  //参数为sql操作语句
    /* 
     * 什么是SQLiteDatabase? 
     * 一个SQLiteDatabase的实例代表了一个SQLite的数据库,通过SQLiteDatabase实例来执行SQL语句,对数据库进行增、删、查、改的操作。  
     */  
      
    /* 
     * 什么是SQLiteOpenHelper ?  
     * 这个类主要生成一个数据库,并对数据库的版本进行管理。 
     * 当在程序当中调用这个类的方法getWritableDatabase()或者getReadableDatabase()方法的时候,如果当时没有数据库,那么Android系统就会自动生成一个数据库,如果有,则返回这个数据库实例。 
     * SQLiteOpenHelper 是一个抽象类,我们通常需要继承它,并且实现里边的3个函数, 
     *     onCreate(SQLiteDatabase):在数据库第一次生成的时候会调用这个方法,一般我们在这个方法里边生成数据库表。 
     *     onUpgrade(SQLiteDatabase, int, int):当数据库需要升级的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删除数据表,并建立新的数据表,当然是否还需要做其他的操作,完全取决于应用的需求。 
     *     onOpen(SQLiteDatabase):这是当打开数据库时的回调函数,一般也不会用到。  
     */  

        四.内容提供器(Content provider)方式

          1.什么是ContentProvider       

          一个Content Provider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。也就是说,一个程序可以通过实现一个Content Provider的抽象接口将自己的数据暴露出去。
          下边列举一些较常见的接口:
          query(Uri uri, String[] projection, String selection, String[] selectionArgs,String sortOrder):通过Uri进行查询,返回一个Cursor。 
          insert(Uri url, ContentValues values):将一组数据插入到Uri 指定的地方。 
          update(Uri uri, ContentValues values, String where, String[] selectionArgs):更新Uri指定位置的数据。 
          delete(Uri url, String where, String[] selectionArgs):删除指定Uri并且符合一定条件的数据。

          2.什么是ContentResolver 
          外界的程序通过ContentResolver接口可以访问ContentProvider提供的数据,在Activity当中通过getContentResolver()可以得到当前应用的ContentResolver实例。
          ContentResolver提供的接口和ContentProvider中需要实现的接口对应,主要有以下几个。 
          query(Uri uri, String[] projection, String selection, String[] selectionArgs,String sortOrder):通过Uri进行查询,返回一个Cursor。
          insert(Uri url, ContentValues values):将一组数据插入到Uri 指定的地方。
          update(Uri uri, ContentValues values, String where, String[] selectionArgs):更新Uri指定位置的数据。
          delete(Uri url, String where, String[] selectionArgs):删除指定Uri并且符合一定条件的数据。

          3.ContentProvider和ContentResolver中用到的Uri【Uri就是用来定位需要操作的数据的】 
          在ContentProvider和ContentResolver当中用到了Uri的形式通常有两种,一种是指定全部数据,另一种是指定某个ID的数据。
         我们看下面的例子。 
              content://contacts/people/  这个Uri指定的就是全部的联系人数据。
              content://contacts/people/1 这个Uri指定的是ID为1的联系人的数据。 

         在上边两个类中用到的Uri一般由两部分组成:一个是需要操作的ContentProvider,另一个就是对ContentProvider中的什么数据进行操作。
            scheme:content://表示,这个是android定义好的,不能改变的 

            主机名或者authority:contacts,唯一的,一般指的是包名。

            路径:people,表示的是people这个表

            ID:1,表示取表中的第几条记录,若不指定则取表中所有记录

         由于URI通常比较长,而且有时候容易出错,且难以理解。所以,在Android当中定义了一些辅助类,并且定义了一些常量来代替这些长字符串的使用,例如下边的代码: Contacts.People.CONTENT_URI (联系人的URI)。

        五. 网络存储方式

        网络存储方式其实就是网络操作,把数据保存在服务器上,再android端通过网络请求来进行数据的交互传输。

        具体操作后面再记录。

  • 相关阅读:
    React.memo()使用教程
    React组件什么时候render
    redux-thunk使用教程
    Redux数据持久化
    Mac 中安装 nvm: 切换Node 不同版本
    上传文件类型选择
    Python获取软件安装列表
    Java读取text文件
    负载均衡
    远程调用
  • 原文地址:https://www.cnblogs.com/ygj0930/p/7514827.html
Copyright © 2011-2022 走看看