您的位置:首页 > 编程语言 > PHP开发

自定义一个自己的ContentProvider程序

2016-02-28 17:45 726 查看
package com.china.anonymous.contentproviderdemoone;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
* Created by Anonymous on 2016/1/31.
*/
public class MyHelper extends SQLiteOpenHelper {

private static final String fileName = "demo.db";
private static final int version = 1;

public MyHelper(Context context) {
super(context, fileName,null, version);
}

@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {

String sql = "create table student(_ID integer primary key autoincrement,name text not null)";
sqLiteDatabase.execSQL(sql);
}

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

}
}
To create a new class which extends ContentProvider
package com.china.anonymous.contentproviderdemoone;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.support.annotation.Nullable;public class MyContentProvider extends ContentProvider {private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);private static final int multiple_Items = 1;private static final int single_item = 2;private MyHelper helper = null;static {matcher.addURI("com.china.anonymous.contentproviderdemoone.MyContentProvider", "student", multiple_Items);matcher.addURI("com.china.anonymous.contentproviderdemoone.MyContentProvider", "student/#", single_item);}@Overridepublic boolean onCreate() {helper = new MyHelper(getContext());return false;}@Nullable@Overridepublic Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {//返回一个游标Cursor cursor = null;SQLiteDatabase db = helper.getReadableDatabase();int flag = matcher.match(uri);switch (flag) {case single_item:long id = ContentUris.parseId(uri);String where_id = "_ID=" + id;cursor = db.query("student", strings, where_id, strings1, null, null, null);case multiple_Items:cursor = db.query("student", strings, s, strings1, null, null, null);}return cursor;}@Nullable@Overridepublic String getType(Uri uri) {int flag = matcher.match(uri);switch (flag) {//查询单条记录,前面那一句固定写法case single_item:return "vnd.android.cursor.item/item";//查询整个表case multiple_Items:return "vnd.android.cursor.dir/items";default:throw new UnsupportedOperationException("not supported operation:" + uri);}}@Nullable@Overridepublic Uri insert(Uri uri, ContentValues contentValues) {//返回一个标志,判断是多条记录(从表中操作)还是单挑记录(操作指定记录)int flag = matcher.match(uri);SQLiteDatabase db = helper.getWritableDatabase();Uri newUri = null;//因为创建的表是自动添加的,所以就不用写单条记录的switch (flag) {case multiple_Items:long id = db.insert("student", null, contentValues);//把新添加的id加入表中newUri = ContentUris.withAppendedId(uri, id);}//返回一个新的urireturn newUri;}@Overridepublic int delete(Uri uri, String s, String[] strings) {//获取指定要删除的从uri中获取id,int flag = matcher.match(uri);SQLiteDatabase db = helper.getWritableDatabase();int deleteItem = 0;switch (flag) {case single_item://获取单挑的uri中的idlong id = ContentUris.parseId(uri);String where_id = "_ID=" + id;deleteItem = db.delete("student", where_id, strings);case multiple_Items:deleteItem = db.delete("student", s, strings);}return deleteItem;}@Overridepublic int update(Uri uri, ContentValues contentValues, String s, String[] strings) {//update主要是获取指定要修改的的uri的id,返回修改后的idint flag = matcher.match(uri);SQLiteDatabase db = helper.getWritableDatabase();int upDataItem = 0;switch (flag) {case single_item:long id = ContentUris.parseId(uri);String where_id = "_ID=" + id;upDataItem = db.update("student", contentValues, where_id, strings);case multiple_Items:upDataItem = db.update("student", contentValues, s, strings);}return upDataItem;}}
在AndroidManifest.xml中添加provider
<providerandroid:authorities="com.china.anonymous.contentproviderdemoone.MyContentProvider"android:name=".MyContentProvider"/>
在主程序中应用,用contentResolver
package com.china.anonymous.contentproviderdemoone;import android.content.ContentResolver;import android.content.ContentValues;import android.net.Uri;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ContentResolver resolver = getContentResolver();Uri uri = Uri.parse("content://com.china.anonymous.contentproviderdemoone.MyContentProvider/student");ContentValues value = new ContentValues();value.put("name", "change");resolver.update(uri, value, "_ID=6", null);resolver.delete(uri, "_ID=9", null);}}
来自为知笔记(Wiz)
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: