你的位置:首页 > 操作系统

[操作系统]Android 五种存储方式个人总结


一 . 文件存储

  FileOutputStream out = openFileOutput("data",Context.MODE_PRIVATE);

  BufferedWriter writer = new BufferedWriter(new OutputStream(out));

  String  s ;

  writer.writer(s);

二. sharePreferences 存储 (键值对形式)

   方法 1.    Context 类中的getSharedPreferences("文件名字",操作模式) 方法

                    操作模式一般两种 :

                                         MODE_PRIVATE                   只允许本进程使用

                                         MODE_MULTI_PROCESS       ('mʌltɪ)多的进程

    方法 2.    Activity类中的getSharedPreferences(操作模式) 方法

    方法 3.    PreferenceManager类中的getSharedPreferences()方法

                

                写:  SharedPreferences.Editor  editor = PreferenceManager.getDefaultSharedPreferences(context).edit();

                       editor.putString("key",value);

                读:  SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

                       prefs.get("key","没有值时候默认")    

三.  SQLite            

           1.首先要创建一SQLiteOpenHelper数据库的辅助类,类中有a,b两个方法

                a. onCreate()用于创建表 ,如

                  Public void onCreate(SQLiteDatabase db){

                                db.execSQL(创建表语句)

                      }

                b.onUpgrade()

           2.创建一个打开或现有的数据库

             SQLiteOpenHelper  msh = new SQLiteOpenHelper(content或this,DB_name,null,Version版本);

             SQLiteDatabase db = msh.getwritableDatabase()

           3.添加数据

                                         // ContentValue类似hashMap

                ContentValues contentValues = new ContentValues();

                contentValues.put("key",values);

                db.insert("表名",条件或null,contentValues)

            4.查询数据

               Cursor cursor = db.query("表名",null,null,null,null,null,null);

                if(cursor.moToFirst()){

                         String data = cursor.getString(cursor.getColumnIndex("data"));

                }while(cursor.moveToNext);

               cursor.close();

             5. 改正数据

              db.update("表名",values,"data=?",new String[]{"new data"});

              6.删除数据

             db.update("表名","pages>?",new String[]{"500"}); //删除pages大于500的表

四. ContentProvide共享数据的存储

注意 : 通过 Context 中的 getContentResolver()方法获取到该类的实例, Uri对象来查询表中的数据

         Uri  可以是  ContactsContract.CommonDataKinds.Phone.CONTENT_URI(读取联系人的权限)

1.内容 URI给内容提供器中的数据建立
       了唯一标识符,它主要由两部分组成,权限(authority)和路径(path)

        authority : 包名 + provider  比如 com.example.app.provider

        path : 表名    比如table1

        头部加上协议声明

        URI 标准的格式写法:content://com.example.app.provider/table1

        Uri uri = Uri.parse("content://com.example.app.provider/table1")

2.创建数据

           ContentValues values = new ContentValues();
           values.put("column1", "text");
           getContentResolver().insert(uri, values);

3.查询数据       

        Cursor cursor = getContentResolver().query(uri,projection,selection,selectionArgs,sortOrder);

        if (cursor != null) {
                            while (cursor.moveToNext()) {
                            String column1 = cursor.getString(cursor.getColumnIndex("column1"));

                             }  

                          cursor.close();
         }

4.修改数据

      getContentResolver().update(uri, values, "column1 = ? and column2 = ?", newString[] {"text", "1"});

5.删除数据

      getContentResolver().delete(uri, "column1 = ?", new String[] { "1" });

四(2)  自定义ContentProvider

1.  自定义类继承ContentProvider类,重新 onCreate() , query() , insert() ,update() , delete() , getType() 方法

    自定义不用uri.parse(),但是首先要对比uri是否相等 uriMatcher.match(传入的uri)  ,其次getType()是根据uri相等,返回 Uri 对象所对应的 MIME类型 .

     MIME类型的规定 :
              1.  必须以 vnd 开头。
               2.  如果内容 URI 以路径结尾,则后接 android.cursor.dir/,如果内容 URI 以 id 结尾,
              则后接 android.cursor.item/。
              3.  最后接上 vnd.<authority>.<path>。比如vnd.android.cursor.dir/vnd.com.example.app.provider.table1

                                                                           vnd.android.cursor.item/vnd. com.example.app.provider.table1

            



 2. manifest.

 <provider

    android:name = "比如com.example.databasetest.DatabaseProvider"

    android:anthorities = "比如com.example.databasetest.provider"

/>

 

五.

  通过网路的空间存储数据,比如上传文件和下载文件,有比如 用户资料的上传和下载核对