Android ContentProvider

来源:互联网 发布:sqlserver 视图 编辑:程序博客网 时间:2024/05/22 12:20

ContentProvider是不同应用程序间数据交换的标准API;

ContentProvider使用表来组织数据

 

一旦某个应用程序通过ContentProvider暴露了自己的数据操作接口,那么不管该应用程序是否启动,,其他应用程序都可以通过该接口来操作应用程序内部的数据(插查修删)

操作的大部分数据是来自数据库有时候也使用文件xml和网络

 

应用程序A可以通过ContentProvider向系统提供访问接口。并提供标识:android:authorities=xxx

其他应用程序可以通过ContentResolver获得系统的访问接口。根据xxx找到A的API。

两边都实现了插入,查询,修改,删除的操作。

 

实现ContentProvider的步骤:

1. 开发一个ContentProvider子类并实现“插查修删”接口

2. 在AndroidManifest.xml中配置ContentProvider

 

ContentResolver 使用 

1. 获得系统的ContentResolver。contentResolver = getContentResolver();

2. 调用ContentResoler的“插查修删”方法

3. 方法参数如

public final Cursor query (Uri uri, String[] projection,String selection,String[] selectionArgs,String sortOrder)


 Uri就是Provider的标识,用来区分不同的ContentProvider。

 第二个参数projection 代表要返回的内容,实际就是列的名字。

 第三个参数selection 设置条件,当于SQL语句中的where后面的。null表示不进行筛选。

 第四个参数selectionArgs,配合第三个参数使用,如果第三个参数中有?,则在selectionArgs会替换掉?,可为null

 第五个参数sortOrder,按照什么进行排序,相当于SQL语句中的Order by后面的如“DSEC”

 

 

代码:

package com.contentproviderdemo;import android.content.ContentProvider;import android.content.ContentValues;import android.database.Cursor;import android.net.Uri;import android.util.Log;public class MyContentProvider extends ContentProvider {private String TAG = "MyContentProvider";@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) {// TODO Auto-generated method stubLog.v(TAG, "=== delete ===");return 0;}@Overridepublic String getType(Uri uri) {// TODO Auto-generated method stubreturn null;}@Overridepublic Uri insert(Uri uri, ContentValues values) {// TODO Auto-generated method stubLog.v(TAG, "=== insert ===");return null;}@Overridepublic boolean onCreate() {// TODO Auto-generated method stubLog.v(TAG, "=== onCreate ===");return false;}@Overridepublic Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {// TODO Auto-generated method stubLog.v(TAG, "=== query ===");return null;}@Overridepublic int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {// TODO Auto-generated method stubLog.v(TAG, "=== update ===");return 0;}}


配置ContentProvider

 

        <provider            android:name="com.contentproviderdemo.MyContentProvider"            android:authorities="com.contentproviderdemo.mycontentprovider"            android:exported="true" >        </provider>


 

ContentResolver的使用

package com.contentresolverdemo;import android.net.Uri;import android.os.Bundle;import android.app.Activity;import android.content.ContentResolver;import android.content.ContentValues;import android.database.Cursor;import android.view.Menu;import android.view.View;import android.widget.Toast;public class MainActivity extends Activity {ContentResolver contentResolver;Uri uri = Uri.parse("content://com.contentproviderdemo.mycontentprovider");@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);// 获得系统的ContentResolver服务contentResolver = getContentResolver();View.OnClickListener listener = new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.button1:// 插入ContentValues values = new ContentValues();values.put("name", "fkjava");Uri newUri = contentResolver.insert(uri, values);Toast.makeText(MainActivity.this,"远程的ContentProvider新插入记录的Uri: " + newUri,Toast.LENGTH_SHORT).show();break;case R.id.button2:// 查询Cursor cursor = contentResolver.query(uri, null,"quary_where", null, null);Toast.makeText(MainActivity.this,"远程的ContentProvider返回的Cursor: " + cursor,Toast.LENGTH_SHORT).show();break;case R.id.button3:// 修改ContentValues values2 = new ContentValues();values2.put("name", "fkJava");int count = contentResolver.update(uri, values2,"update_where", null);Toast.makeText(MainActivity.this,"远程的ContentProvider update()的返回值: " + count,Toast.LENGTH_SHORT).show();break;case R.id.button4:// 删除int count1 = contentResolver.delete(uri, "delete_where",null);Toast.makeText(MainActivity.this,"远程的ContentProvider 删除的记录数为: " + count1,Toast.LENGTH_SHORT).show();break;default:break;}}};findViewById(R.id.button1).setOnClickListener(listener);findViewById(R.id.button2).setOnClickListener(listener);findViewById(R.id.button3).setOnClickListener(listener);findViewById(R.id.button4).setOnClickListener(listener);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

 

 参考:

 http://blog.csdn.net/wssiqi/article/details/8132603

 

=====================================================

 

 

 

 

 

0 0
原创粉丝点击