您的位置:首页 > 移动开发 > Android开发

Android组件之ContentProvider(一)

2016-07-05 11:51 351 查看
ContentProvider是不同应用程序之间进行数据交换的标准·API,两个核心API ContentProvider,

ContentResolver

首先要明确uri的概念

比如:content://com.mrpeng.contentprovider/word

1.content:// 这个部分是android的contentProvider规定的,暴露ContentProvider,访问ContentProvider的协议默认就是content://

2.com.mrpeng.contentprovider:这部分是ContentProvider的authorities,系统由这个部分来找到操作哪个ContentProvider。

3.word:这个是资源部分

public class FirstProvider extends ContentProvider
{
/**
* 第一次创建时调用
* @return
*/
public static final String TAG="FirstProvider";
@Override
public boolean onCreate()
{
Log.e(TAG, "onCreate方法被调用");

return true;
}

/**
* 实现查询方法,该方法应该返回查询得到的Cursor
* @param uri
* @param projection
* @param selection
* @param selectionArgs
* @param sortOrder
* @return
*/
@Nullable
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
{
Log.e(TAG,"query方法被调用===uri::"+uri+"selection:::"+selection);

return null;
}

/**
* 该方法返回值代表了改ContentProvider所提供的MIME类型
* @param uri
* @return
*/
@Nullable
@Override
public String getType(Uri uri)
{
return null;
}

/**
* 实现插入方法,该方法应该返回新插入的记录Uri
* @param uri
* @param values
* @return
*/
@Nullable
@Override
public Uri insert(Uri uri, ContentValues values)
{
Log.e(TAG,"insert方法被调用  参数uri::"+uri+"values参数::"+values);

return null;
}

/**
* 实现删除方法,应该返回被删除的记录条数
* @param uri
* @param selection
* @param selectionArgs
* @return
*/
@Override
public int delete(Uri uri, String selection, String[] selectionArgs)
{

Log.e(TAG,"delete方法被调用 参数uri::"+uri+"参数selection::"+selection);
return 0;
}

/**
* 实现更新方法,该方法应该返回被更新的记录条数
* @param uri
* @param values
* @param selection
* @param selectionArgs
* @return
*/
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
{
Log.e(TAG,"update方法被调用uri::"+uri+"selection::"+selection+"value::"+values);
return 0;
}


还需要配置

<provider
android:authorities="com.mrpeng.contentproviderdemo.firstProvider"
android:name=".FirstProvider"
android:exported="true"/>


public class MainActivity extends AppCompatActivity
{

private ContentResolver mContentResolver;
Uri mUri=Uri.parse("content://com.mrpeng.contentproviderdemo.firstProvider/");
public  static final String TAG="ContentResolver";

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContentResolver = getContentResolver();

}

public void insert(View view){
ContentValues contentValues = new ContentValues();
contentValues.put("name", "mrpeng");
//调用contentresolver的insert()方法,实际返回的是该Uri对应的
//ContentProvider的insert()返回值,其他 delete update query同
Uri newUri = mContentResolver.insert(mUri, contentValues);
Log.e(TAG,"远程ContentProvider新插入的uri为"+newUri);

}
public void delete(View view){
int count = mContentResolver.delete(mUri, "delete_where", null);
Log.e(TAG,"远程ContentProvider更新记录数为"+count);
}
public void update(View view){
ContentValues contentValues = new ContentValues();
contentValues.put("name", "xiaopeng");
int count = mContentResolver.update(mUri, contentValues, "update_where", null);
Log.e(TAG,"远程更新的记录数::"+count);

}
public void query(View view){

Cursor cursor = mContentResolver.query(mUri, null, "query_where", null, null);
Log.e(TAG,"远程查询返回的cuseror::"+cursor);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android