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
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐