日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android数据存储之sharedpreferences与Content Provider

發布時間:2024/7/23 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android数据存储之sharedpreferences与Content Provider 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

android中對數據操作包含有:

file, sqlite3, Preferences, ContectResolver與ContentProvider前三種數據操作方式都只是針對本應用內數據,程序不能通過這三種方法去操作別的應用內的數據

其中sqlite3已經在上一節中講述了,本節主要包含sharedpreferences與ContentProvider

sharedpreferences保存數據

//實例化SharedPreferences對象(第一步) SharedPreferences mySharedPreferences= getSharedPreferences("test", Activity.MODE_PRIVATE); //實例化SharedPreferences.Editor對象(第二步) SharedPreferences.Editor editor = mySharedPreferences.edit(); //用putString的方法保存數據 editor.putString("name", "Karl"); editor.putString("habit", "sleep"); //提交當前數據 editor.commit(); //使用toast信息提示框提示成功寫入數據 Toast.makeText(this, "數據成功寫入SharedPreferences!" , Toast.LENGTH_LONG).show();

執行以上代碼,SharedPreferences將會把這些數據保存在test.xml文件中,可以在File Explorer的data/data/相應的包名/test.xml 下導出該文件,并查看。

2、使用SharedPreferences讀取數據方法如下:

//同樣,在讀取SharedPreferences數據前要實例化出一個SharedPreferences對象 SharedPreferencessharedPreferences= getSharedPreferences("test", Activity.MODE_PRIVATE); // 使用getString方法獲得value,注意第2個參數是value的默認值 String name =sharedPreferences.getString("name", ""); String habit =sharedPreferences.getString("habit", ""); //使用toast信息提示框顯示信息 Toast.makeText(this, "讀取數據如下:"+"\n"+"name:" + name + "\n" + "habit:" + habit, Toast.LENGTH_LONG).show();

內容提供者

在manifest文件中注冊,安卓四大組件都要在其中注冊

provider android:name="com.zj.sqlitedemo.providers.PersonContentProvider"android:authorities="com.zj.sqlitedemo.providers.PersonContentProvider"></provider>

設置訪問路徑,供其他調用者訪問

private final static String authority ="com.zj.sqlitedemo.providers.PersonContentProvider";private final static int PERSON_INSERT_CODE=0;private final static int PERSON_DELETE_CODE=1;private final static int PERSON_UPDATE_CODE=2;private final static int PERSON_QUERY_ALL_CODE=3;private final static UriMatcher uriMatcher;private PersonSQLiteOpenHelper mOpenHelper;static{uriMatcher=new UriMatcher(UriMatcher.NO_MATCH);//添加一些URIuriMatcher.addURI(authority, "person/insert", PERSON_INSERT_CODE);uriMatcher.addURI(authority, "person/delete", PERSON_DELETE_CODE);uriMatcher.addURI(authority, "person/update", PERSON_UPDATE_CODE);uriMatcher.addURI(authority, "person/queryAll", PERSON_QUERY_ALL_CODE);}

主要方法:

 

 public boolean onCreate() 在創建ContentProvider時調用

  public Cursor query(Uri, String[], String, String[], String) 用于查詢指定Uri的ContentProvider,返回一個Cursor

  public Uri insert(Uri, ContentValues) 用于添加數據到指定Uri的ContentProvider中

  public int update(Uri, ContentValues, String, String[]) 用于更新指定Uri的ContentProvider中的數據

  public int delete(Uri, String, String[]) 用于從指定Uri的ContentProvider中刪除數據

  public String getType(Uri) 用于返回指定的Uri中的數據的MIME類型

  *如果操作的數據屬于集合類型,那么MIME類型字符串應該以vnd.android.cursor.dir/開頭。

  例如:要得到所有person記錄的Uri為content://contacts/person,那么返回的MIME類型字符串為”vnd.android.cursor.dir/person”。

  *如果要操作的數據屬于非集合類型數據,那么MIME類型字符串應該以vnd.android.cursor.item/開頭。

  例如:要得到id為10的person記錄的Uri為content://contacts/person/10,那么返回的MIME類型字符串應為”vnd.android.cursor.item/person”。

方法實現

查詢方法

public Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {// TODO Auto-generated method stubswitch(uriMatcher.match(uri)){case PERSON_QUERY_ALL_CODE://從表中更新SQLiteDatabase db= mOpenHelper.getWritableDatabase();if(db.isOpen()){Cursor cursor= db.query("person", projection, selection, selectionArgs,null,null,sortOrder);return cursor;}break;default:throw new IllegalArgumentException("URI不匹配"+uri);}return null;}

插入方法

public Uri insert(Uri uri, ContentValues values) {// TODO Auto-generated method stubswitch(uriMatcher.match(uri)){case PERSON_INSERT_CODE://添加到表中SQLiteDatabase db= mOpenHelper.getWritableDatabase();if(db.isOpen()){long id=db.insert("person", null, values);db.close();return ContentUris.withAppendedId(uri, id);}break;default:throw new IllegalArgumentException("URI不匹配");}return null;}

刪除方法實現

public int delete(Uri uri, String selection, String[] selectionArgs) {// TODO Auto-generated method stubswitch(uriMatcher.match(uri)){case PERSON_DELETE_CODE://從表中刪除SQLiteDatabase db= mOpenHelper.getWritableDatabase();if(db.isOpen()){int count=db.delete("person", selection, selectionArgs);db.close();return count;}break;default:throw new IllegalArgumentException("URI不匹配"+uri);}return 0;}

更新方法實現

public int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {// TODO Auto-generated method stubswitch(uriMatcher.match(uri)){case PERSON_UPDATE_CODE://從表中更新SQLiteDatabase db= mOpenHelper.getWritableDatabase();if(db.isOpen()){int count=db.update("person", values, selection, selectionArgs);db.close();return count;}break;default:throw new IllegalArgumentException("URI不匹配"+uri);}return 0;}

得到類型

public String getType(Uri uri) {// TODO Auto-generated method stubswitch(uriMatcher.match(uri)){case PERSON_QUERY_ALL_CODE:return "vnd.android.cursor.dir/person";default:break;}return null;}

注意: *如果操作的數據屬于集合類型,那么MIME類型字符串應該以vnd.android.cursor.dir/開頭。

例如:要得到所有person記錄的Uri為content://contacts/person,那么返回的MIME類型字符串為”vnd.android.cursor.dir/person”。

*如果要操作的數據屬于非集合類型數據,那么MIME類型字符串應該以vnd.android.cursor.item/開頭。

例如:要得到id為10的person記錄的Uri為content://contacts/person/10,那么返回的MIME類型字符串應為”vnd.android.cursor.item/person”。

例如此處就用了vnd.android.cursor.dir開頭

ContentResolver解析內容提供者提供的數據,當外部應用需要對ContentProvider中的數據進行添加、刪除、修改和查詢操作時,可以使用ContentResolver類來完成,要獲取ContentResolver對象,可以使用Context提供的getContentResolver()方法


插入實現

public void testInsert(){Uri uri=Uri.parse("content://com.zj.sqlitedemo.providers.PersonContentProvider/person/insert");ContentResolver resolver= getContext().getContentResolver();ContentValues values=new ContentValues();values.put("name", "在嗎");values.put("age", 25);uri=resolver.insert(uri,values);Log.i(tag, "uri"+uri);long id=ContentUris.parseId(uri);Log.i(tag, "添加到"+id);}

刪除實現

public void testDelete(){Uri uri=Uri.parse("content://com.zj.sqlitedemo.providers.PersonContentProvider/person/delete");ContentResolver resolver= getContext().getContentResolver();String where="_id=?";String []selectionArgs={"21"};int count=resolver.delete(uri, where, selectionArgs);Log.i(tag, "刪除了行:"+count);}

更新實現

public void testUpdate(){Uri uri=Uri.parse("content://com.zj.sqlitedemo.providers.PersonContentProvider/person/delete");ContentResolver resolver= getContext().getContentResolver();ContentValues values=new ContentValues();values.put("name", "zj");int count=resolver.update(uri, values, "_id=?", new String[]{"20"});Log.i(tag, "更新了"+count);}

查詢實現

public void testQueryAll(){Uri uri=Uri.parse("content://com.zj.sqlitedemo.providers.PersonContentProvider/person/queryAll");ContentResolver resolver= getContext().getContentResolver();Cursor cursor=resolver.query(uri, new String[]{"_id","name","age"}, null, null, null);if(cursor!=null&&cursor.getCount()>0){int id;String name;int age;while(cursor.moveToNext()){id=cursor.getInt(0);name=cursor.getString(1);age=cursor.getInt(2);Log.i(tag, "id:"+id+"name:"+name+"age:"+age);}cursor.close();}}

內容提供者與sharedpreferences完成

總結

以上是生活随笔為你收集整理的Android数据存储之sharedpreferences与Content Provider的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。