创建ContentProvider以及使用ContentProvider基本流程

创建ContentProvider基本流程
1.定义一个类DataProvider继承自ContentProvider
2.实现其onCreate、getType、insert、delete、update、query方法
3.在清单文件中注册ContentProvider
4.将访问途径Uri提供出去
使用ContentProvider基本流程
1.通过getContentResolver获取ContentResolver对象resolver
2.通过Uri对ContentProvider中的数据进行增删改查操作

  1. 数据库的创建:
    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);
    }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值