使用ContentProvider进行进程间通信
BookProviderpackage cn.edu.zufe.app0406.provider;import android.content.ContentProvider;import android.content.ContentValues;import android.content.Context;import android.content.UriMatcher;import and
·
BookProvider
package cn.edu.zufe.app0406.provider;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.preference.PreferenceFragment;
import android.text.style.TtsSpan;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.security.spec.PSSParameterSpec;
import cn.edu.zufe.app0406.database.BookHelper;
public class BookProvider extends ContentProvider {
private static final String TAG = "BookProvider";
private static final String AUTHORITY = "cn.edu.zufe.app0406.provider";
public static final Uri BOOK_CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/book");
public static final Uri USER_CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/user");
public static final int BOOK_URI_CODE = 0;
public static final int USER_URI_CODE = 1;
public static final UriMatcher sUrimatcher = new UriMatcher(UriMatcher.NO_MATCH);
static {
sUrimatcher.addURI(AUTHORITY, "book", BOOK_URI_CODE);
sUrimatcher.addURI(AUTHORITY, "user", USER_URI_CODE);
}
private SQLiteDatabase mDb;
private Context mContext;
private String getTableName(Uri uri) {
String tableName = null;
switch (sUrimatcher.match(uri)) {
case BOOK_URI_CODE:
tableName = BookHelper.BOOK_TABLE_NAME;
break;
case USER_URI_CODE:
tableName = BookHelper.USER_TABLE_NAME;
break;
default:
}
return tableName;
}
@Override
public boolean onCreate() {
mContext = getContext();
mDb = new BookHelper(mContext).getWritableDatabase();
mDb.execSQL("delete from " + BookHelper.USER_TABLE_NAME);
mDb.execSQL("delete from " + BookHelper.BOOK_TABLE_NAME);
mDb.execSQL("insert into book values(2, 'Android');");
mDb.execSQL("insert into book values(3, 'C++');");
mDb.execSQL("insert into book values(1, 'Java');");
mDb.execSQL("insert into book values(4, 'Html');");
mDb.execSQL("insert into book values(5, 'Algorithm');");
mDb.execSQL("insert into user values(1, 'Jack', 1);");
mDb.execSQL("insert into user values(2, 'Jackie', 1)");
Log.d(TAG, "onCreate: ");
return true;
}
@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
Log.d(TAG, "query: ");
String table = getTableName(uri);
if(table == null) {
throw new IllegalArgumentException();
}
return mDb.query(table, projection, selection, selectionArgs, null, null, sortOrder);
}
@Nullable
@Override
public String getType(@NonNull Uri uri) {
Log.d(TAG, "getType: ");
return null;
}
@Nullable
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
Log.d(TAG, "insert: ");
String table = getTableName(uri);
if(table == null) {
throw new IllegalArgumentException();
}
mDb.insert(table, null, values);
mContext.getContentResolver().notifyChange(uri, null);
return uri;
}
@Override
public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
Log.d(TAG, "delete: ");
String table = getTableName(uri);
if(table == null) {
throw new IllegalArgumentException();
}
int count = mDb.delete(table, selection, selectionArgs);
if (count > 0) {
mContext.getContentResolver().notifyChange(uri, null);
}
return count;
}
@Override
public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
Log.d(TAG, "update: ");
String table = getTableName(uri);
if(table == null) {
throw new IllegalArgumentException();
}
int count = mDb.update(table, values, selection, selectionArgs);
if (count > 0) {
mContext.getContentResolver().notifyChange(uri, null);
}
return count;
}
}
Manifest中注册
<provider
android:name=".provider.BookProvider"
android:authorities="cn.edu.zufe.app0406.provider"
android:process=":provider" />
BookHelper
package cn.edu.zufe.app0406.database;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class BookHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "book_provider.db";
public static final String BOOK_TABLE_NAME = "book";
public static final String USER_TABLE_NAME = "user";
private static final int VERSION = 1;
private String CREATE_BOOK_TABLE = "CREATE TABLE IF NOT EXISTS " + BOOK_TABLE_NAME + " (_id INTEGER PRIMARY KEY, name TEXT);";
private String CREATE_USER_TABLE = "CREATE TABLE IF NOT EXISTS " + USER_TABLE_NAME + " (_id INTEGER PRIMARY KEY, name TEXT, sex INT);";
public BookHelper(@Nullable Context context) {
super(context, DB_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK_TABLE);
db.execSQL(CREATE_USER_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
package cn.edu.zufe.app0406;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.CursorIndexOutOfBoundsException;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import java.util.regex.PatternSyntaxException;
import cn.edu.zufe.app0406.bean.Book;
public class ProviderActivity extends AppCompatActivity {
public static final String TAG = "ProviderActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_provider);
Uri uri = Uri.parse("content://cn.edu.zufe.app0406.provider/book");
ContentValues values = new ContentValues();
values.put("_id", 6);
values.put("name", "Java多线程");
getContentResolver().insert(uri, values);
Cursor cursor = getContentResolver().query(uri, new String[]{"_id", "name"}, null, null, null);
while (cursor.moveToNext()) {
Book book = new Book();
book.id = cursor.getInt(0);
book.name = cursor.getString(1);
Log.d(TAG, "onCreate: " + book);
}
cursor.close();
Uri userUri = Uri.parse("content://cn.edu.zufe.app0406.provider/user");
Cursor userCursor = getContentResolver().query(userUri, new String[]{"_id", "name", "sex"}, null, null, null);
while (userCursor.moveToNext()) {
int id = userCursor.getInt(0);
String name = userCursor.getString(1);
int sex = userCursor.getInt(2);
Log.d(TAG, "onCreate: " + id + name + sex);
}
userCursor.close();
}
}
2021-04-16 10:30:21.210 29659-29659/cn.edu.zufe.app0406 D/ProviderActivity: onCreate: cn.edu.zufe.app0406.bean.Book@aafac58
2021-04-16 10:30:21.210 29659-29659/cn.edu.zufe.app0406 D/ProviderActivity: onCreate: cn.edu.zufe.app0406.bean.Book@75f61b1
2021-04-16 10:30:21.210 29659-29659/cn.edu.zufe.app0406 D/ProviderActivity: onCreate: cn.edu.zufe.app0406.bean.Book@346b696
2021-04-16 10:30:21.210 29659-29659/cn.edu.zufe.app0406 D/ProviderActivity: onCreate: cn.edu.zufe.app0406.bean.Book@ec1a217
2021-04-16 10:30:21.215 29659-29659/cn.edu.zufe.app0406 D/ProviderActivity: onCreate: 1Jack1
2021-04-16 10:30:21.216 29659-29659/cn.edu.zufe.app0406 D/ProviderActivity: onCreate: 2Jackie1
更多推荐
所有评论(0)