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 "