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

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对应的几个方法:

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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: