ContentProvider使用方法。
ContentProvide的使用涉及ContentProvider、 ContentObserver、 ContentReslover 、ContentValues、Cursor、Uri、UriMatcher以及数据库等。
content Provider。它最大的特点是可以在应用之间共享数据
1.定义自己的ContentProvide类,
2.在AndroidManifest.xml上注册,并指定authorities属性,给外界提供固定Uri对外提供服务
提供的方法
操作方法:insert、getType、delete、query、update、oncreate用于创建数据库或链接数据库,以及提供为contentResolver增删改查的方法。
ContentValues是用于存储ContentResolver处理的值。
ContentResolver用于访问content模型,其实就是访问和操作contentprovider。
实现方式:Context提供了getContentResolver方法,这表明Activity、Service组件都可通过该方法获取该类的实例
ContentResolver提供的操作方法:insert、getType、delete、query、update等与ProvideContent相对应,通过Uri链接ContentProvide和ContentResolver
Cursor类,游标。应用时一般通过查询query得到。
Uri:协议部分、域名、路径、ID、字段
其中协议部分:content://
域名对应authoties属性
配置ContentProvide
ContentProvide的使用涉及ContentProvider、 ContentObserver、 ContentReslover 、ContentValues、Cursor、Uri、UriMatcher以及数据库等。
content Provider。它最大的特点是可以在应用之间共享数据
1.定义自己的ContentProvide类,
2.在AndroidManifest.xml上注册,并指定authorities属性,给外界提供固定Uri对外提供服务
提供的方法
操作方法:insert、getType、delete、query、update、oncreate用于创建数据库或链接数据库,以及提供为contentResolver增删改查的方法。
ContentValues是用于存储ContentResolver处理的值。
ContentResolver用于访问content模型,其实就是访问和操作contentprovider。
实现方式:Context提供了getContentResolver方法,这表明Activity、Service组件都可通过该方法获取该类的实例
ContentResolver提供的操作方法:insert、getType、delete、query、update等与ProvideContent相对应,通过Uri链接ContentProvide和ContentResolver
Cursor类,游标。应用时一般通过查询query得到。
Uri:协议部分、域名、路径、ID、字段
其中协议部分:content://
域名对应authoties属性
路径:资源部分或数据部分
ContentProvider示例:
package org.crazyit.content; import android.content.ContentProvider; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; public class FirstProvider extends ContentProvider { // 第一次创建该ContentProvider时调用该方法 @Override public boolean onCreate() { System.out.println("===onCreate方法被调用==="); return true; } // 该方法的返回值代表了该ContentProvider所提供数据的MIME类型 @Override public String getType(Uri uri) { System.out.println("~~getType方法被调用~~"); return null; } // 实现查询方法,该方法应该返回查询得到的Cursor @Override public Cursor query(Uri uri, String[] projection, String where, String[] whereArgs, String sortOrder) { System.out.println(uri + "===query方法被调用==="); System.out.println("where参数为:" + where); return null; } // 实现插入的方法,该方法应该新插入的记录的Uri @Override public Uri insert(Uri uri, ContentValues values) { System.out.println(uri + "===insert方法被调用==="); System.out.println("values参数为:" + values); return null; } // 实现删除方法,该方法应该返回被删除的记录条数 @Override public int delete(Uri uri, String where, String[] whereArgs) { System.out.println(uri + "===delete方法被调用==="); System.out.println("where参数为:" + where); return 0; } // 实现删除方法,该方法应该返回被更新的记录条数 @Override public int update(Uri uri, ContentValues values, String where, String[] whereArgs) { System.out.println(uri + "===update方法被调用==="); System.out.println("where参数为:" + where + ",values参数为:" + values); return 0; } }
<pre name="code" class="java">ContentProvider:提供了增、删、改、查的方法,同时也可以联系本地SQLite,对外提供数据。
配置ContentProvide
<provider android:exported="true" android:name=".FirstProvider" android:authorities="org.crazyit.providers.firstprovider"> </provider>
name:指定的Android类
authoruties:指定ContentProvide的uri
exported:
package org.crazyit.resolver; import org.crazyit.resolver.R; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.Toast; public class FirstResolver extends Activity { ContentResolver contentResolver; Uri uri = Uri.parse("content://org.crazyit.providers.firstprovider/"); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 获取系统的ContentResolver对象 contentResolver = getContentResolver(); } public void query(View source) { // 调用ContentResolver的query()方法。 // 实际返回的是该Uri对应的ContentProvider的query()的返回值 Cursor c = contentResolver.query(uri, null , "query_where", null, null); Toast.makeText(this, "远程ContentProvide返回的Cursor为:" + c, Toast.LENGTH_LONG).show(); } public void insert(View source) { ContentValues values = new ContentValues(); values.put("name", "fkjava"); // 调用ContentResolver的insert()方法。 // 实际返回的是该Uri对应的ContentProvider的insert()的返回值 Uri newUri = contentResolver.insert(uri, values); Toast.makeText(this, "远程ContentProvide新插入记录的Uri为:" + newUri, Toast.LENGTH_LONG).show(); } public void update(View source) { ContentValues values = new ContentValues(); values.put("name", "fkjava"); // 调用ContentResolver的update()方法。 // 实际返回的是该Uri对应的ContentProvider的update()的返回值 int count = contentResolver.update(uri, values , "update_where", null); Toast.makeText(this, "远程ContentProvide更新记录数为:" + count, Toast.LENGTH_LONG).show(); } public void delete(View source) { // 调用ContentResolver的delete()方法。 // 实际返回的是该Uri对应的ContentProvider的delete()的返回值 int count = contentResolver.delete(uri , "delete_where", null); Toast.makeText(this, "远程ContentProvide删除记录数为:" + count, Toast.LENGTH_LONG).show(); } }通过this. getContentResolver()方法获取ContentResolve。ContentResolve与ContentProvide通过Uri联系在一起,通过contentResolve调用增删改查,直接调用ContentProvide的增删改查方法。
Android系统为ContentProvide提供工具类:UriMatcher和ContentUris
UriMatcher:主要作用是为了确定该ContentProvide能处理的Uri,以及确定每个方法中Uri参数多操作的数据
ContentUris:主要是处理增加数据时,对返回值Uri的处理,insert时返回一个携带id的uri