android中contentProvider初步学习
2012-11-29 15:32
309 查看
contentprovdier是程序用来向外暴露自己的数据,使其他程序可以通过URI访问到我们程序的数据. 感觉这个没什么用,其实只要知道怎么用它来查询数据就好,没必要知道它是怎么实现的.下面我来简单测试下contentprovider的实现方法,很简单.
想要自己的程序里面的数据能够被其他程序所访问到,有以下步骤:
第一:首先生成一个继承contentprovider的类.
第二:在androidMainfest.xml里面添加一个provider的标签就可以了.
<provider android:name="zuoyeSQLlite.hall.MyContentProvider"
android:authorities="zuoyeSQLite.hall.MyContentProvider"/>
是不是很简单?其他程序访问的时候只要按以下步骤就可以访问到了:
Uri uri=Uri.Uri.parse("content://"+AUTHORY+"/userinfo1");
AUTHORY其实就是 android:authorities的值.,注意.这里必须一样..否则系统是找不到的.也是就是
String AUTHORY="zuoyeSQLite.hall.MyContentProvider"
然后获取一个
ContentResolver mContentResolver=getContentResolver();
这样就其他程序就可以反问我们的数据了..
ContentResolver对应的几个方法:
into the content provider
data from the content provider
其实和contentprovider里面的方法是一样的..他们所对应的数据,最终是会被传到我们在之前程序里面定义的那个contentprovider类的方法,至于你想要在这几个方法里面做什么事,那个就随你意了..下面我给一个简单的例子,帮助理解.
package zuoyeSQLlite.hall;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
public class MyContentProvider extends ContentProvider{
SQLiteDatabase mSqLiteDatabase=null;
MySQLiteOpenHelper mMySQLiteOpenHelper=null;
private static final String TableName_USERS="userinfo1";
private static final String DataName="myData";
private static final String AUTHORY="zuoyeSQLite.hall.MyContentProvider";
private static final int USERS_COLLECTION=1;
private static final int USERS_SINGLE=2;
private static final String CONTENT_TYPE="vnd.android.cursor.dir/userinfo1";
private static final String CONTENT_TYPE_ITEM="vnd.android.cursor.item/userinfo1";
private static final UriMatcher mUriMacher;
static{
mUriMacher=new UriMatcher(UriMatcher.NO_MATCH);
mUriMacher.addURI(AUTHORY, TableName_USERS, USERS_COLLECTION);
mUriMacher.addURI(AUTHORY, TableName_USERS+"/#", USERS_SINGLE);
}
@Override
public boolean onCreate() {
// TODO Auto-generated method stub
mMySQLiteOpenHelper=new MySQLiteOpenHelper(getContext(), DataName, TableName_USERS);
System.out.println("Provider-OnCreate");
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
System.out.println("Provider-getType");
mSqLiteDatabase=mMySQLiteOpenHelper.getReadableDatabase();
Cursor cursor=null;
switch(mUriMacher.match(uri)){
case USERS_COLLECTION:
cursor=mSqLiteDatabase.query(TableName_USERS, projection, selection, selectionArgs, null, null, sortOrder);
return cursor;
case USERS_SINGLE:
String where=uri.getPathSegments().get(1);
cursor=mSqLiteDatabase.query(TableName_USERS, projection, where, selectionArgs, null, null, sortOrder);
return cursor;
default:
throw new IllegalArgumentException("unknowm URI:"+uri);
}
}
@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
System.out.println("Provider-getType");
switch(mUriMacher.match(uri)){
case USERS_COLLECTION:
return CONTENT_TYPE;
case USERS_SINGLE:
return CONTENT_TYPE_ITEM;
default:
throw new IllegalArgumentException("unknowm URI:"+uri);
}
}
@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
System.out.println("Provider-insert");
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
System.out.println("Provider-delete");
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
System.out.println("Provider-update");
// TODO Auto-generated method stub
return 0;
}
}
想要自己的程序里面的数据能够被其他程序所访问到,有以下步骤:
第一:首先生成一个继承contentprovider的类.
第二:在androidMainfest.xml里面添加一个provider的标签就可以了.
<provider android:name="zuoyeSQLlite.hall.MyContentProvider"
android:authorities="zuoyeSQLite.hall.MyContentProvider"/>
是不是很简单?其他程序访问的时候只要按以下步骤就可以访问到了:
Uri uri=Uri.Uri.parse("content://"+AUTHORY+"/userinfo1");
AUTHORY其实就是 android:authorities的值.,注意.这里必须一样..否则系统是找不到的.也是就是
String AUTHORY="zuoyeSQLite.hall.MyContentProvider"
然后获取一个
ContentResolver mContentResolver=getContentResolver();
这样就其他程序就可以反问我们的数据了..
ContentResolver对应的几个方法:
query(Uri, String[], String, String[], String)which returns data to the caller
insert(Uri, ContentValues)which inserts new data
into the content provider
update(Uri, ContentValues, String, String[])which updates existing data in the content provider
)]delete(Uri, String, String[])which deletes
data from the content provider
其实和contentprovider里面的方法是一样的..他们所对应的数据,最终是会被传到我们在之前程序里面定义的那个contentprovider类的方法,至于你想要在这几个方法里面做什么事,那个就随你意了..下面我给一个简单的例子,帮助理解.
package zuoyeSQLlite.hall;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
public class MyContentProvider extends ContentProvider{
SQLiteDatabase mSqLiteDatabase=null;
MySQLiteOpenHelper mMySQLiteOpenHelper=null;
private static final String TableName_USERS="userinfo1";
private static final String DataName="myData";
private static final String AUTHORY="zuoyeSQLite.hall.MyContentProvider";
private static final int USERS_COLLECTION=1;
private static final int USERS_SINGLE=2;
private static final String CONTENT_TYPE="vnd.android.cursor.dir/userinfo1";
private static final String CONTENT_TYPE_ITEM="vnd.android.cursor.item/userinfo1";
private static final UriMatcher mUriMacher;
static{
mUriMacher=new UriMatcher(UriMatcher.NO_MATCH);
mUriMacher.addURI(AUTHORY, TableName_USERS, USERS_COLLECTION);
mUriMacher.addURI(AUTHORY, TableName_USERS+"/#", USERS_SINGLE);
}
@Override
public boolean onCreate() {
// TODO Auto-generated method stub
mMySQLiteOpenHelper=new MySQLiteOpenHelper(getContext(), DataName, TableName_USERS);
System.out.println("Provider-OnCreate");
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
System.out.println("Provider-getType");
mSqLiteDatabase=mMySQLiteOpenHelper.getReadableDatabase();
Cursor cursor=null;
switch(mUriMacher.match(uri)){
case USERS_COLLECTION:
cursor=mSqLiteDatabase.query(TableName_USERS, projection, selection, selectionArgs, null, null, sortOrder);
return cursor;
case USERS_SINGLE:
String where=uri.getPathSegments().get(1);
cursor=mSqLiteDatabase.query(TableName_USERS, projection, where, selectionArgs, null, null, sortOrder);
return cursor;
default:
throw new IllegalArgumentException("unknowm URI:"+uri);
}
}
@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
System.out.println("Provider-getType");
switch(mUriMacher.match(uri)){
case USERS_COLLECTION:
return CONTENT_TYPE;
case USERS_SINGLE:
return CONTENT_TYPE_ITEM;
default:
throw new IllegalArgumentException("unknowm URI:"+uri);
}
}
@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
System.out.println("Provider-insert");
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
System.out.println("Provider-delete");
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
System.out.println("Provider-update");
// TODO Auto-generated method stub
return 0;
}
}
相关文章推荐
- Android学习第18课—ContentProvider初步
- Android学习十九:ContentProvider初步
- Android学习十九:ContentProvider初步
- Android学习十九:ContentProvider初步
- Android核心组件之ContentProvider(一)--初步学习
- Android学习十九:ContentProvider初步
- Android学习十九:ContentProvider初步
- Android 开发学习笔记(一)—— Activity初步
- android 数据库 SQLiteOpenHelper和ContentProvider学习笔记---添加数据及显示(一)
- Android 学习 笔记_11. Service初步
- Android 对AlertDialog、DatePickerDialog、TimePickerDialog初步学习
- Android学习--WebService初步
- Android --- libgdx android 学习初步(环境搭建及测试)
- Android学习(十二) ContentProvider
- 【Android学习之道】 四大组件之ContentProvider内容提供器
- Android学习日志13__四大组件04__ContentProvider
- android布局初步学习
- Android学习_ContentProvider和Uri
- Android学习之ContentProvider,ContentObserver
- Android学习 ContentProvider数据更新与Observer模式