android随笔小记ContentProvider

ContentProvider是Android 应用实现数据共享最好的组件。我们常用的到通过ContentProvider共享的数据有:联系人、图片、视频、音频等。

实现自己的ContentProvider:

1、定义Uri,数据库名,表名,列名

2、基于SQLite创建数据库,创建表

3、 继承ContentProvider,实现onCreate(),onInsert()、onUpdate() onquery() ondelete()方法

4、同过getContentResolve()操作ContentProvider

PS:如果需要知道ContentProvider的数据发生了变化,就要在操作完数据后调用getContentResolve().notifyChange(uri,null)来告知应用程序

知识扩展

Android常用的存储方式:

sharePerferences 可共享数据,需要用sharePerferences API读写数据

文件存储(File)  可共享数据,需要读写文件

网络存储 可共享数据,需要网络

SQLite

ContentProvider 可共享数据,统一了访问方式,方便,简单。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在Android Studio中实现ContentProvider的步骤: 1. 创建一个新的Java类,命名为`DBHelper`,并继承自`SQLiteOpenHelper`类。在`DBHelper`类中,重写`onCreate()`和`onUpgrade()`方法,用于创建和升级数据库。 ```java public class DBHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "mydatabase.db"; private static final int DATABASE_VERSION = 1; public DBHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { // 创建数据库表 db.execSQL("CREATE TABLE mytable (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 升级数据库表 db.execSQL("DROP TABLE IF EXISTS mytable"); onCreate(db); } } ``` 2. 创建一个新的Java类,命名为`MyContentProvider`,并继承自`ContentProvider`类。在`MyContentProvider`类中,重写`onCreate()`、`query()`、`insert()`、`update()`和`delete()`方法,用于实现对数据的CRUD操作。 ```java public class MyContentProvider extends ContentProvider { private DBHelper dbHelper; @Override public boolean onCreate() { dbHelper = new DBHelper(getContext()); return true; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.query("mytable", projection, selection, selectionArgs, null, null, sortOrder); cursor.setNotificationUri(getContext().getContentResolver(), uri); return cursor; } @Override public Uri insert(Uri uri, ContentValues values) { SQLiteDatabase db = dbHelper.getWritableDatabase(); long id = db.insert("mytable", null, values); getContext().getContentResolver().notifyChange(uri, null); return ContentUris.withAppendedId(uri, id); } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { SQLiteDatabase db = dbHelper.getWritableDatabase(); int count = db.update("mytable", values, selection, selectionArgs); getContext().getContentResolver().notifyChange(uri, null); return count; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { SQLiteDatabase db = dbHelper.getWritableDatabase(); int count = db.delete("mytable", selection, selectionArgs); getContext().getContentResolver().notifyChange(uri, null); return count; } @Override public String getType(Uri uri) { return null; } } ``` 3. 在`AndroidManifest.xml`文件中注册`MyContentProvider`。 ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp"> <application> <!-- ... --> <provider android:name=".MyContentProvider" android:authorities="com.example.myapp.provider" android:exported="true" /> </application> </manifest> ``` 4. 在需要访问`ContentProvider`的地方,使用`ContentResolver`类进行数据的访问。 ```java ContentResolver resolver = getContentResolver(); Cursor cursor = resolver.query(Uri.parse("content://com.example.myapp.provider/mytable"), null, null, null, null); // 处理查询结果 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值