简介
使用ContentProvider可以方便地实现向第三方应用提供本应用数据的增删改查功能。详见官网介绍:
https://developer.android.google.cn/guide/topics/providers/content-providers
代码实现
服务端应用实现
新建一个类,实现ContentProvider的增删改查接口,并定义ContentProvider使用的url:
package com.test.contentproviderserver;
import android.content.ContentProvider;
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
{
private SQLiteDatabase db;
//若不匹配采用UriMatcher.NO_MATCH(-1)返回
private static final UriMatcher MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
//匹配码
private static final int CODE_NAME = 1;
private static final int CODE_INFO = 2;
//定义url与匹配码的对应关系
static
{
MATCHER.addURI("com.test.dataProvider", "name", CODE_NAME);
MATCHER.addURI("com.test.dataProvider", "info", CODE_INFO);
}
@Override
public boolean onCreate()
{
DBHelper helper = new DBHelper(getContext());
//创建数据库
db = helper.getWritableDatabase();
return true;
}
/**
* 外部应用向本应用插入数据
*/
@Override
public Uri insert(Uri uri, ContentValues values)
{
switch (MATCHER.match(uri))
{
case CODE_NAME:
Log.d("dataProvider", "insert name");
try {
db.insert("name_table", null, values);
} catch(Exception e) {
Log.d("dataProvider","insert Exception:" + e);
}
break;
case CODE_INFO:
Log.d("dataProvider","insert info");
try {
db.insert("info_table", null, values);
} catch(Exception e) {
Log.d("dataProvider","insert Exception:" + e);
}
break;
default:
break;
}
return null;
}
/**
* 外部应用向本应用删除数据
*/
@Override
public int delete(Uri uri, String selection, String[] selectionArgs)
{
switch (MATCHER.match(uri))
{
case CODE_NAME:
Log.d("dataProvider", "delete name");
try {
db.delete("name_table", selection, selectionArgs);
} catch(Exception e) {
Log.d("dataProvider","delete Exception:" + e);
}
break;
case CODE_INFO:
Log.d("dataProvider","delete info")<