Android ContentProvider和ContentResolver实例

ContentResolver和ContentProvider通过相同的URI联系,实现数据共享。我重写了public class MyAdapter extends BaseAdapter,putData(),然后listview.setAdapter(myAdapter)显示数据。edit layout用来安排显示数据的格式。主要代码来自《安卓编程兵书》p311。完整的URI如下,"content://"+AUTHORITY+"/books",books是图书信息表的名字,AUTHORITY定义如下:

public static final String AUTHORITY="lmy.com.bookinfo_provider"

1.CotentProvider

//《安卓变成兵书》p311
//sample_8_6.java
package lmy.com.sample_8_6;

import android.content.ContentProvider;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.text.TextUtils;


public class Sample_8_6 extends ContentProvider{
    private DB_helper dbhelper = null;
    private static UriMatcher sUriMatcher =null;
    private static final int BOOKS_RECORDS = 1;
    private static final int BOOKS_RECORD =2;
    static{
        sUriMatcher  = new UriMatcher(UriMatcher.NO_MATCH);
        sUriMatcher.addURI(Bookinfo_provider.AUTHORITY,"books",BOOKS_RECORDS);
        sUriMatcher.addURI(Bookinfo_provider.AUTHORITY,"books/#",BOOKS_RECORD);
    }

    @Override
    public boolean onCreate(){
        dbhelper = new DB_helper(this.getContext());
        return true;
    }
    public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.androidbook.book";
    public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.androidbook.book";
    @Override
    public String getType(Uri uri){
        //TODO Auto-generated method stub
        switch(sUriMatcher.match(uri)) {
            case BOOKS_RECORDS:
                return Bookinfo_provider.Bookinfo.CONTENT_TYPE;
            case BOOKS_RECORD:
                return Bookinfo_provider.Bookinfo.CONTENT_ITEM_TYPE;
            default:
                throw new IllegalArgumentException("Uknown URI "+uri);
        }
    }
    @Override
    public Uri insert(Uri uri,ContentValues values){
        if(sUriMatcher.match(uri)!=BOOKS_RECORDS){
            throw new IllegalArgumentException("Unknown URI "+uri);
        }
        if(!values.containsKey(Bookinfo_provider.Bookinfo.BOOK_NAME)){
            throw new SQLException("Failed to insert,please input Book name"+uri);
        }
        if(!values.containsKey(Bookinfo_provider.Bookinfo.BOOK_ISBN)){
            values.put(Bookinfo_provider.Bookinfo.BOOK_ISBN,"Unknown ISBN");
        }
        if(!values.containsKey(Bookinfo_provider.Bookinfo.BOOK_AUTHOR)){
            values.put(Bookinfo_provider.Bookinfo.BOOK_AUTHOR,"Unknown author");
        }
        SQLiteDatabase db = dbhelper.getWritableDatabase();
        long rowID = db.insert(Bookinfo_provider.Bookinfo.TABLE_NAME,Bookinfo_provider.Bookinfo.BOOK_NAME,values);
        if(rowID>0){
            Uri insertBookedUri = ContentUris.withAppendedId(
                    Bookinfo_provider.Bookinfo.CONTENT_URI,rowID);
            getContext().getContentResolver().notifyChange(insertBookedUri,null);
            return insertBookedUri;
        }
        throw new SQLException("Failed to insert row int "+uri);
    }
    @Override
    public int delete(Uri uri,String selection,String[] selectionArgs){
        SQLiteDatabase db = dbhelper.getWritableDatabase();
        int count = 0;
        switch(sUriMatcher.match(uri)){
            case BOOKS_RECORDS:
                count = db.delete(Bookinfo_provider.Bookinfo.TABLE_NAME,selection,selectionArgs);
                break;
            case BOOKS_RECORD:
                String rowID = uri.getPathSegments().get(1);
                String where = Bookinfo_provider.Bookinfo._ID+"="+rowID
                        +(!TextUtils.isEmpty(selection)?" AND ("+selectionArgs+')':"");
                count = db.delete(Bookinfo_provider.Bookinfo.TABLE_NAME,where,selectionArgs);
                break;
            default:
                throw new IllegalArgumentException("Unknown URI"+uri);
        }
        db.close();
        this.getContext().getContentResolver().notifyChange(uri,null);
        return count;
    }
    @Override
    public int update(Uri uri,ContentValues values,String selection,String[] selectionArgs){
        SQLiteDatabase db = dbhelper.getWritableDatabase();
        int count = 0;
        switch (sUriMatcher.match(uri)){
            case BOOKS_RECORDS:
                count = db.update(Bookinfo_provider.BOOKS_TABLE_NAME,values,selection,selectionArgs);
                break;
            case BOOKS_RECORD:
                String rowID = uri.getPathSegments().get(1);
                String where = Bookinfo_provider.Bookinfo._ID+"="+rowID
                        +(!TextUtils.isEmpty(selection)?" AND("+selection+')':"");
                count = db.update(Bookinfo_provider.BOOKS_TABLE_NAME,values,where,selectionArgs);
                break;
            default:
                throw new IllegalArgumentException("Uknown URI "
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值