利用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成功");
}
}