网上很多有关android contentprovider的说明很多但是不全,在这里就写了一个完整的demo,多说无益直接上代码吧!!!!!!!!!!!!!!!!!!!!!!
1:工具类
package com.pengxiaolong.example;
import android.net.Uri;
public class dbUtil {
public static String Dbname="student.db";
public static String TableName="student";
public static int dbVisition=1;
public static String ID="id";
public static String NAME="name";
public static String SEX="sex";
public static String sql="create table "+TableName+"("+ID+" TEXT,"+NAME+" TEXT,"+SEX+" TEXT"+")";
public final static int STUDENT_TABLE=1;
public final static int STUDENT__TANLE_ITEM=2;
public static String TYPE_TABLE="heart.style";
public static String TYPE_TABLE_ITEM="heart.style.otem";
public static String AUTHOR="com.pengxiaolong.heartstyle";
public static Uri URI=Uri.parse("content://"+AUTHOR+"/"+TableName);
public static Uri URI1=Uri.parse("content://"+AUTHOR+"/"+TableName+"/"+1);
}
2:数据库创建类
package com.pengxiaolong.example;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class myDbhelper extends SQLiteOpenHelper {
public myDbhelper(Context context) {
super(context, dbUtil.Dbname, null, dbUtil.dbVisition);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase arg0) {
// TODO Auto-generated method stub
arg0.execSQL(dbUtil.sql);
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
arg0.execSQL("drop table if exists " + dbUtil.TableName);
onCreate(arg0);
}
public void InsertDate() {
for (int i = 0; i < 20; i++) {
ContentValues contentValues = new ContentValues();
contentValues.put(dbUtil.ID, (i + 1) + "");
contentValues.put(dbUtil.NAME, "name" + (i + 1));
contentValues.put(dbUtil.SEX, "sex" + (i + 1));
this.getWritableDatabase().insert(dbUtil.TableName, dbUtil.ID,
contentValues);
}
}
}
3:数据共享类
package com.pengxiaolong.example;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
public class myContentProvider extends ContentProvider {
public static UriMatcher uriMatcher;
public myDbhelper dbhelper;
public SQLiteDatabase db;
static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher
.addURI(dbUtil.AUTHOR, dbUtil.TableName, dbUtil.STUDENT_TABLE);
uriMatcher.addURI(dbUtil.AUTHOR, dbUtil.TableName + "/#",
dbUtil.STUDENT__TANLE_ITEM);
}
@Override
public boolean onCreate() {
// TODO Auto-generated method stub
dbhelper = new myDbhelper(getContext());
db = dbhelper.getWritableDatabase();
dbhelper.InsertDate();
return true;
}
@Override
public int delete(Uri arg0, String arg1, String[] arg2) {
// TODO Auto-generated method stub
if (uriMatcher.match(arg0) == dbUtil.STUDENT_TABLE) {
db.delete(dbUtil.TableName, arg1, arg2);
} else {
String id = arg0.getPathSegments().get(1);
db.delete(dbUtil.TableName,
dbUtil.ID+"="+id
+ (!TextUtils.isEmpty(arg1) ? " AND (" + arg1 + ')'
: ""), arg2);
}
getContext().getContentResolver().notifyChange(arg0, null);
return uriMatcher.match(arg0);
}
@Override
public String getType(Uri arg0) {
// TODO Auto-generated method stub
switch (uriMatcher.match(arg0)) {
case dbUtil.STUDENT_TABLE:
return dbUtil.TYPE_TABLE;
case dbUtil.STUDENT__TANLE_ITEM:
return dbUtil.TYPE_TABLE_ITEM;
}
return null;
}
@Override
public Uri insert(Uri arg0, ContentValues arg1) {
// TODO Auto-generated method stub
if (uriMatcher.match(arg0) == dbUtil.STUDENT_TABLE) {
long rowid = db.insert(dbUtil.TableName, dbUtil.ID, arg1);
if (rowid > 0) {
Uri noteUri = ContentUris.withAppendedId(dbUtil.URI, rowid);
getContext().getContentResolver().notifyChange(noteUri, null);
return noteUri;
}
} else {
return null;
}
return arg0;
}
@Override
public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3,
String arg4) {
// TODO Auto-generated method stub
Cursor c=null;
switch (uriMatcher.match(arg0)) {
case dbUtil.STUDENT_TABLE:
Log.e("=======================", "=============>>>>>>quary1");
c=db.query(dbUtil.TableName, arg1, arg2, arg3, null, null, arg4);
break;
case dbUtil.STUDENT__TANLE_ITEM:
Log.e("=======================", "=============>>>>>>quary2");
String id = arg0.getPathSegments().get(1);
c=db.query(dbUtil.TableName, arg1, dbUtil.ID+"="+id
+ (!TextUtils.isEmpty(arg2) ? " AND (" + arg1 + ')'
: ""), arg3, null, null, arg4);
break;
}
c.setNotificationUri(getContext().getContentResolver(), arg0);
return c;
}
@Override
public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {
// TODO Auto-generated method stub
int count=0;
switch (uriMatcher.match(arg0)) {
case dbUtil.STUDENT_TABLE:
db.update(dbUtil.TableName, arg1, arg2, arg3);
break;
case dbUtil.STUDENT__TANLE_ITEM:
String id = arg0.getPathSegments().get(1);
db.update(dbUtil.TableName, arg1, dbUtil.ID+"="+id+(!TextUtils.isEmpty(arg2) ? " AND (" + arg1 + ')'
: ""), arg3);
break;
}
getContext().getContentResolver().notifyChange(arg0, null);
return count;
}
4:实体类
package com.pengxiaolong.example;
public class Student {
private int ID;
private String Name;
private String Sex;
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getSex() {
return Sex;
}
public void setSex(String sex) {
Sex = sex;
}
}
5:适配器类
package com.pengxiaolong.example;
import java.util.List;
import com.example.androidcontentprovider.R;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class Studentadapter extends BaseAdapter {
private List<Student> data;
private LayoutInflater layoutInflater;
public Studentadapter(List<Student> data, LayoutInflater layoutInflater) {
// TODO Auto-generated constructor stub
this.data = data;
this.layoutInflater = layoutInflater;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return data.get(arg0);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
Option opt=null;
if (arg1 == null) {
opt=new Option();
arg1 = layoutInflater.inflate(R.layout.item, null);
opt.id=(TextView) arg1.findViewById(R.id.id);
opt.name=(TextView) arg1.findViewById(R.id.name);
opt.sex=(TextView) arg1.findViewById(R.id.sex);
arg1.setTag(opt);
}else{
opt=(Option) arg1.getTag();
}
opt.id.setText(data.get(arg0).getID()+"");
opt.name.setText(data.get(arg0).getName());
opt.sex.setText(data.get(arg0).getSex());
return arg1;
}
class Option {
private TextView id;
private TextView name;
private TextView sex;
}
}
6:视图类
package com.pengxiaolong.example;
import java.util.ArrayList;
import java.util.List;
import com.example.androidcontentprovider.R;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.ListView;
public class MainActivity extends Activity{
private ListView listview;
private List<Student> data=new ArrayList<Student>();
;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
quaryData();
viewinit();
}
private void viewinit(){
listview=(ListView) this.findViewById(R.id.listView1);
listview.setAdapter(new Studentadapter(data, getLayoutInflater()));
}
public void quaryData(){
ContentResolver contentResolver=this.getContentResolver();
// Cursor cursor=contentResolver.query(dbUtil.URI, null, null, null, null);
Cursor cursor=contentResolver.query(dbUtil.URI1, null, null, null, null);
int count=cursor.getCount();
if(count!=0){
for (int i = 0; i <count; i++) {
cursor.moveToPosition(i);
Student student=new Student();
student.setID(Integer.parseInt(cursor.getString(0)));
student.setName(cursor.getString(1));
student.setSex(cursor.getString(2));
data.add(student);
}
}
cursor.close();
}
}
7:主配置文件
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.androidcontentprovider"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity android:name="com.pengxiaolong.example.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<provider android:name="com.pengxiaolong.example.myContentProvider" android:authorities="@string/Author" android:exported="true">
</provider>
</application>
</manifest>
代码就这些 当然你也可以再新建一个工程调用一下,是没有问题的哦!
}