android ContentProvider简单介绍及使用


ContentProviderContentResolverUri的关系,无论是ContentResolver还是ContentProvider,它们所提供的CRUD方法的第一个参数都是uri,也就是说UriContentProvider ContentResolver数据交换的标识符,ContentResolver对指定的Uri执行CRUD操作,但uri并不是真正的数据中心,因此CRUD操作会委托给Uri对应的ContentProvider来实现。

开发ContentProvider

开发ContentProvider只需如下两步:

1:开发一个ContentProvider子类,该子类需要实现query(),insert(),update(),

delete ()。

2:在AndroidMainfest.xml中注册ContentProvider。指定androidauthorities属性,

如下实例:

一:开发ContentProvider

public class FirstProvider extends ContentProvider {

@Override

public boolean onCreate() {

System.out.println("=========onCreate( )======");

return false;

}

@Override

public Cursor query(Uri uri, String[] projection, String selection,

String[] selectionArgs, String sortOrder) {

System.out.println("==========query ()==========");

System.out.println("where 的参数为" + selection);

return null;

}

@Override

public String getType(Uri uri) {

return null;

}

 

@Override

public Uri insert(Uri uri, ContentValues values) {

System.out.println("=============insert ()===============");

return null;

}

 

@Override

public int delete(Uri uri, String selection, String[] selectionArgs) {

System.out.println(uri + " ======delete()======");

System.out.println("where 的参数为" + selection);

return 0;

}

@Override

public int update(Uri uri, ContentValues values, String selection,

String[] selectionArgs) {

System.out.println(uri + "====update ()=======");

System.out.println("where 参数为" + selection + "Values 的参数为" + values);

return 0;

}

 

}

二:注册ContentProvider

AndroidMainfest.xml文件中如下:

 <provider 

            android:name="com.youdian.firstprivder.FirstProvider"

            android:authorities="com.youdian.firstprivder.provider"   

            ></provider>

三:使用ContentResolver

public class MainActivity extends Activity implements OnClickListener {

private Button add, query, update, delete;

ContentResolver contentResolver;

Uri uri = Uri.parse("content://com.youdian.firstprivder.provider/ ");// 将字符串转换为Uri对象

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

add = (Button) findViewById(R.id.add);

add.setOnClickListener(this);

query = (Button) findViewById(R.id.query);

query.setOnClickListener(this);

update = (Button) findViewById(R.id.update);

update.setOnClickListener(this);

delete = (Button) findViewById(R.id.delete);

delete.setOnClickListener(this);

contentResolver = getContentResolver();// 获取contentResolver对象

}

 

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.query:

Cursor c = contentResolver.query(uri, null, "query_where", null,

null);

Toast.makeText(this, "远程ContentProvider返回的Cursor为:" + c, 3000)

.show();

break;

 

case R.id.add:

// contentValues 用来存储到ContentResolver可以处理一组值

ContentValues values = new ContentValues();

values.put("name", "fkjava");

Uri newuri = contentResolver.insert(uri, values);

Toast.makeText(this, "远程ContentProvider新插入的记录的Uri为:+newuri", 3000)

.show();

break;

case R.id.update:

ContentValues values1 = new ContentValues();

values1.put("name", " fkandroid");

int count = contentResolver.update(uri, values1, "update_where",

null);

Toast.makeText(this, "远程ContentProvider更新的记录数为" + count, 3000)

.show();

break;

case R.id.delete:

int coun = contentResolver.delete(uri, "delete_where", null);

Toast.makeText(this, "远程ContentProvider删除的记录数为 :" + coun, 3000)

.show();

break;

}

}

}

运行实例在模拟器上可以发现:

ContentProvider只有一个onCreate()声明周期,当第一次访问该ContentProvider的时候,onCreate()会被回调,onCreate ()方法只会被调用一次,ContentProvider提供的CRUD方法则由其他程序通过ContentResolver调用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值