Android 开发值contentProvider的使用

利用contentProvider来共享数据。
首先得有一个类继承自sqliteOpenHelper用于数据库的创建和更新,代码如下所示:

public class databaseHelper extends SQLiteOpenHelper {
    /**
     * user表的创建语句
     */
    public static final String CREATE_USERINFO="create table User ("
            +"id integer primary key autoincrement,"
            +"serialNum integer,"
            +"watchId varchar(40),"
            +"cardCode varchar(10),"
            +"name varchar(10),"
            +"watchStyle integer(1)"
            +")";
    private Context mContext;//上下文
    /**
     * @param context   ——上下文
     * @param name      ——数据库名称
     * @param factory   ——cursor
     * @param version   ——版本号
     */
    public databaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        mContext=context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_USERINFO);
       // Looper.prepare();
       // Toast.makeText(mContext, "数据库表创建成功", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        onCreate(db);
    }
}

之后通过新建一个ContentProvider来实现对数据库的共享(右键项目-》other-》Content Provider)设置URI AUHORITY。contentProvider的代码如下,通过共享一个查询接口给其他app来实现对数据库的共享。(可以共享,增删改查的任何方法)

public class contentProvider extends ContentProvider {

    private static final int WATCH_DIR=0;
    private static final int WATCH_ITEM=1;
    private static final String AUTHORITY="com.watch.provider";
    private static UriMatcher uriMatcher;
    private databaseHelper dbHelper;
    static {
        uriMatcher=new UriMatcher(UriMatcher.NO_MATCH);
        uriMatcher.addURI(AUTHORITY,"User",WATCH_DIR);
        uriMatcher.addURI(AUTHORITY,"User/#",WATCH_ITEM);
    }
    public contentProvider() {
    }
    /**
     * 删除数据-不允许删除数据
     * @param uri
     * @param selection
     * @param selectionArgs
     * @return
     */
    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {

        return 0;
    }

    @Override
    public String getType(Uri uri) {
        // TODO: Implement this to handle requests for the MIME type of the data
        // at the given URI.
        switch(uriMatcher.match(uri)){
            case WATCH_DIR:
                return "vnd.android.cursor.dir/vnd.com.watch.provider.User";
            case WATCH_ITEM:
                return "vnd.android.cursor.item/vnd.com.watch.provider.User";
        }
        return null;
    }

    /**
     * 插入指定的数据-不允许插入数据
     * @param uri
     * @param values
     * @return
     */
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        return null;
    }

    @Override
    public boolean onCreate() {
        // TODO: Implement this to initialize your content provider on startup.
        dbHelper=new databaseHelper(getContext(),"watch.db",null,2);//创建SQLiteOpenHelper的实例
        return true;
    }

    /**
     * @param uri
     * @param projection
     * @param selection
     * @param selectionArgs
     * @param sortOrder
     * @return
     */
    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        // TODO: Implement this to handle query requests from clients.
        //查询数据库
        SQLiteDatabase db=dbHelper.getReadableDatabase();
        Cursor cursor=null;
        switch(uriMatcher.match(uri)){
            case WATCH_DIR:
                //查询指定条件的一条或多条数据
                cursor =db.query("User",projection,selection,selectionArgs,null,null,sortOrder);
                break;
            case WATCH_ITEM:
                //查询指定id的数据
                String UserId=uri.getPathSegments().get(1);
                cursor =db.query("User",projection,"id=?",new String[]{UserId},null,null,sortOrder);
                break;
        }
        return cursor;
    }

    /**
     * 更新数据-不允许更新数据
     * @param uri
     * @param values
     * @param selection
     * @param selectionArgs
     * @return
     */
    @Override
    public int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {
        return 0;
    }

对于其他app要想对前面的app的数据库数据的获取可以通过获得下面的方法获得:

AUTHORITY="com.watch.provider";
Uri uri=Uri.parse("content://"+AUTHORITY+"/User");
Cursor cursor=getContentResolver().query(uri,null,null,null,null);
if(cursor!=null){
    while(cursor.moveToNext()){
        String name=cursor.getString(cursor.getColumnIndex("name"));
        Log.d("name",name);
        watchId=cursor.getString(cursor.getColumnIndex("watchId"));
        Log.d("watchId",watchId);
        Log.d("TAG","执行获取watchID成功");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值