创建ContentProvider基本流程
1.定义一个类DataProvider继承自ContentProvider
2.实现其onCreate、getType、insert、delete、update、query方法
3.在清单文件中注册ContentProvider
4.将访问途径Uri提供出去
使用ContentProvider基本流程
1.通过getContentResolver获取ContentResolver对象resolver
2.通过Uri对ContentProvider中的数据进行增删改查操作
-
数据库的创建:
package com.bwf.provider_01;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;public class DataHelper extends SQLiteOpenHelper{ public DataHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { String sql = "create table per(" + "_id integer primary key autoincrement," + "name varchar(8))"; db.execSQL(sql); Log.d("fanhy", "建立表格per"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
2.创建一个类继承contentprovider,能够在里面进行数据库的crud操作
package com.bwf.provider_01;
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.util.Log;
public class DataProvider extends ContentProvider {
DataHelper helper;
SQLiteDatabase db;
@Override
public boolean onCreate() {
myLog("onCreate");
helper = new DataHelper(getContext(), "Person.db", null, 1);
db = helper.getReadableDatabase();
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
myLog("query");
return db.query("per", projection, selection, selectionArgs, null,
null, sortOrder);
}
@Override
public String getType(Uri uri) {
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
myLog("insert");
long rowId = db.insert("per", null, values);
if (rowId > 0) {
// 插入成功则返回新的把id添加进去形成新的uri
Uri newUri = ContentUris.withAppendedId(uri, rowId);
// 通知数据已更新
getContext().getContentResolver().notifyChange(newUri, null);
return newUri;
}
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
myLog("delete");
return db.delete("per", selection, selectionArgs);
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
myLog("update");
return db.update("per", values, selection, selectionArgs);
}
void myLog(String s) {
Log.d("fanhy", s);
}
}
3.使用ContentProvider,当然创建好了过后就是要注册
package com.bwf.provider_01;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
/**
* 创建ContentProvider基本流程
* 1.定义一个类DataProvider继承自ContentProvider
* 2.实现其onCreate、getType、insert、delete、update、query方法
* 3.在清单文件中注册ContentProvider
* 4.将访问途径Uri提供出去
*
* 使用ContentProvider基本流程
* 1.通过getContentResolver获取ContentResolver对象resolver
* 2.通过Uri对ContentProvider中的数据进行增删改查操作
* */
public class MainActivity extends Activity {
ContentResolver resolver;
Uri uri = Uri.parse("content://com.fanhy.provider/per");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
resolver = getContentResolver();
}
@Override
public 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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_add:
ContentValues values = new ContentValues();
values.put("name", "张三");
values.put("_id", 1);
resolver.insert(uri, values);
values.put("name", "李思");
values.put("_id", 2);
resolver.insert(uri, values);
values.put("name", "张五");
values.put("_id", 3);
resolver.insert(uri, values);
break;
case R.id.action_del:
resolver.delete(uri, null, null);
break;
case R.id.action_update:
ContentValues values1 = new ContentValues();
values1.put("name", "张三儿");
// 插入成功则返回新的把id添加进去形成新的uri
Uri newUri = Uri.parse("content://com.fanhy.provider/per/1");
resolver.update(newUri, values1, "_id = 1", null);
break;
case R.id.action_search:
Cursor c = resolver.query(uri, null, null, null, null);
while(c.moveToNext()){
String name = c.getString(c.getColumnIndex("name"));
Log.d("fanhy", name);
}
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}