国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ContentProvider內容提供者與ContentResolver內容訪問者

2019-11-08 18:47:36
字體:
來源:轉載
供稿:網友

剛好接觸到ContentPRovider內容提供者與ContentResolver內容訪問者,對它進行了一個初步的了解,它主要用于不同的應用程序之間實現數據的共享,允許一個程序訪問另一個程序,還可以保證數據的安全。

以下是我寫的一個簡單的ContentProvider與ContentResolver的一個列子(沒有用系統內容提供者): 首先創建兩個項目分別為android16_sqlite和android24_contentprovider。android16_sqlite為內容提供者,android24_contentprovider為內容訪問者。

在android16_sqlite創建DBHelper

public class DBHelper extends SQLiteOpenHelper { /** * * @param context 上下文 * @param name 名字(數據庫名),文件名 * @param factory 游標工廠,多數情況:null * @param version 數據庫版本 */ public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); Log.i("test","構造"); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { //操作:創建表的操作 sqLiteDatabase.execSQL("create table person(_id integer primary key autoincrement,name,age)"); Log.i("test","創建表"); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { Log.i("test","數據庫版本,低--->高"); }}

在android16_sqlite中創建類MyProvider繼承ContentProvider實現六個方法

public class MyProvider extends ContentProvider { private SQLiteDatabase database; @Override public boolean onCreate() { DBHelper dbHelper=new DBHelper(getContext(),"G150831.db",null,2); database = dbHelper.getReadableDatabase(); /*保存到數據庫中 ContentValues values=new ContentValues();//Map values.put("name","longdan"); values.put("age",19); values.putNull("_id"); database.insert("person","name",values); Toast.makeText(this, " 增加成功"+values, Toast.LENGTH_SHORT).show();*/ Log.i("test","onCreate"); return false; } @Nullable @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { //查詢所有的數據 Log.i("test","query"); return database.query(true,"person",projection,selection,selectionArgs,null,null,sortOrder,null); } @Nullable @Override public String getType(Uri uri) { Log.i("test","getType"); return null; } @Nullable @Override public Uri insert(Uri uri, ContentValues values) { Log.i("test","insert"); return null; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { Log.i("test","delete"); return 0; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { Log.i("test","update"); return 0; }}

在android16_sqlite清單文件AndroidManifest.xml中配置

<!--配置內容提供者--> <provider android:authorities="com.example.android16_sqlite.person" android:name="com.example.myprovider.MyProvider" android:exported="true" ></provider>

在android24_contentprovider 中通過 ContentResolver contentResolver= getContentResolver(); 實例化對象ContentResolver通過ContentResolver實現 以下是實現的基礎的查詢:

//uri中的值在需要滿足content://協議后面的為你在內容提供者配置文件AndroidManifest.xml中authorities定義的名字Uri uri=Uri.parse("content://com.example.android16_sqlite.person"); Cursor cursor=contentResolver.query(uri,null,null,null,null); while (cursor.moveToNext()){ int id=cursor.getInt(cursor.getColumnIndex("_id")); String name=cursor.getString(cursor.getColumnIndex("name")); int age=cursor.getInt(cursor.getColumnIndex("age")); Log.i("test",id+" "+name+" "+age); }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 栾川县| 商丘市| 遂川县| 涟源市| 大关县| 神木县| 博白县| 枝江市| 饶河县| 札达县| 蓬溪县| 元江| 广水市| 灵武市| 武夷山市| 巴楚县| 营口市| 鄂托克前旗| 九江市| 桃园县| 五寨县| 麦盖提县| 岗巴县| 扬州市| 紫阳县| 襄樊市| 镇原县| 木兰县| 新兴县| 新乐市| 孙吴县| 沙坪坝区| 皮山县| 隆子县| 资源县| 河曲县| 桂林市| 潮安县| 盐津县| 和平区| 隆林|