zoukankan      html  css  js  c++  java
  • Android ContentProvider 填删改查 实例

    ContentProvider 操作类


    import java.util.Calendar;
    import java.util.HashMap;

    import android.content.ContentProvider;
    import android.content.ContentUris;
    import android.content.ContentValues;
    import android.content.Context;
    import android.content.UriMatcher;
    import android.content.res.Resources;
    import android.database.Cursor;
    import android.database.SQLException;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.database.sqlite.SQLiteQueryBuilder;
    import android.net.Uri;
    import android.text.TextUtils;
    import android.util.Log;

    import com.eoeAndroid.contentProvider.Diary.DiaryColumns;

    //继承自ContentProvider
    public class DiaryContentProvider extends ContentProvider {

        private static final String DATABASE_NAME = "database";
        private static final int DATABASE_VERSION = 3;
        private static final String DIARY_TABLE_NAME = "diary";

        private static final int DIARIES = 1;
        private static final int DIARY_ID = 2;

        private static final UriMatcher sUriMatcher; //URi 操作类

        private static class DatabaseHelper extends SQLiteOpenHelper {

            DatabaseHelper(Context context) {
                super(context, DATABASE_NAME, null, DATABASE_VERSION);
                Log.i("jinyan", "DATABASE_VERSION=" + DATABASE_VERSION);
            }

            @Override
            public void onCreate(SQLiteDatabase db) {
                Log.i("jinyan", "onCreate(SQLiteDatabase db)");
                String sql = "CREATE TABLE " + DIARY_TABLE_NAME + " ("
                        + DiaryColumns._ID + " INTEGER PRIMARY KEY,"
                        + DiaryColumns.TITLE + " TEXT," + DiaryColumns.BODY
                        + " TEXT," + DiaryColumns.CREATED + " TEXT" + ");";
                //
                sql ="CREATE TABLE " + DIARY_TABLE_NAME + " ("
                + DiaryColumns._ID + " INTEGER PRIMARY KEY,"
                + DiaryColumns.TITLE + " varchar(255)," + DiaryColumns.BODY
                + " TEXT," + DiaryColumns.CREATED + " TEXT" + ");";
                //
                Log.i("jinyan", "sql="+sql);
                db.execSQL(sql);
            }

            @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                Log.i("jinyan",
                        " onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)="
                                + newVersion);
                db.execSQL("DROP TABLE IF EXISTS diary");
                onCreate(db);
            }
        }

        private DatabaseHelper mOpenHelper;

        static {
            sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
            sUriMatcher.addURI(Diary.AUTHORITY, "diaries", DIARIES);//添加解析规则1
            sUriMatcher.addURI(Diary.AUTHORITY, "diaries/#", DIARY_ID);//添加解析规则2

        }

        @Override
        public boolean onCreate() {
            mOpenHelper = new DatabaseHelper(getContext());
            return true;
        }

        //以下是重载实现接口方法
        @Override
        public Cursor query(Uri uri, String[] projection, String selection,
                String[] selectionArgs, String sortOrder) {
            SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

            switch (sUriMatcher.match(uri)) {
            case DIARIES:
                qb.setTables(DIARY_TABLE_NAME);
                break;

            case DIARY_ID:
                qb.setTables(DIARY_TABLE_NAME);
                qb.appendWhere(DiaryColumns._ID + "="
                        + uri.getPathSegments().get(1));
                break;

            default:
                throw new IllegalArgumentException("Unknown URI " + uri);
            }

            String orderBy;
            if (TextUtils.isEmpty(sortOrder)) {
                orderBy = Diary.DiaryColumns.DEFAULT_SORT_ORDER;
            } else {
                orderBy = sortOrder;
            }

            SQLiteDatabase db = mOpenHelper.getReadableDatabase();
            Cursor c = qb.query(db, projection, selection, selectionArgs, null,
                    null, orderBy);
            return c;
        }

        @Override
        public String getType(Uri uri) {
            switch (sUriMatcher.match(uri)) {
            case DIARIES:
                return DiaryColumns.CONTENT_TYPE;

            case DIARY_ID:
                return DiaryColumns.CONTENT_ITEM_TYPE;

            default:
                throw new IllegalArgumentException("Unknown URI " + uri);
            }
        }

        @Override
        public Uri insert(Uri uri, ContentValues initialValues) {
            if (sUriMatcher.match(uri) != DIARIES) {
                throw new IllegalArgumentException("Unknown URI " + uri);
            }

            ContentValues values;
            if (initialValues != null) {
                values = new ContentValues(initialValues);
            } else {
                values = new ContentValues();
            }

            if (values.containsKey(Diary.DiaryColumns.CREATED) == false) {
                values.put(Diary.DiaryColumns.CREATED, getFormateCreatedDate());
            }

            if (values.containsKey(Diary.DiaryColumns.TITLE) == false) {
                Resources r = Resources.getSystem();
                values.put(Diary.DiaryColumns.TITLE, r
                        .getString(android.R.string.untitled));
            }

            if (values.containsKey(Diary.DiaryColumns.BODY) == false) {
                values.put(Diary.DiaryColumns.BODY, "");
            }

            SQLiteDatabase db = mOpenHelper.getWritableDatabase();
            long rowId = db.insert(DIARY_TABLE_NAME, DiaryColumns.BODY, values);
            if (rowId > 0) {
                Uri diaryUri = ContentUris.withAppendedId(
                        Diary.DiaryColumns.CONTENT_URI, rowId);
                return diaryUri;
            }

            throw new SQLException("Failed to insert row into " + uri);
        }

        @Override
        public int delete(Uri uri, String where, String[] whereArgs) {
            SQLiteDatabase db = mOpenHelper.getWritableDatabase();
            String rowId = uri.getPathSegments().get(1);
            return db
                    .delete(DIARY_TABLE_NAME, DiaryColumns._ID + "=" + rowId, null);

        }

        @Override
        public int update(Uri uri, ContentValues values, String where,
                String[] whereArgs) {
            SQLiteDatabase db = mOpenHelper.getWritableDatabase();
            String rowId = uri.getPathSegments().get(1);
            return db.update(DIARY_TABLE_NAME, values, DiaryColumns._ID + "="
                    + rowId, null);

        }

        public static String getFormateCreatedDate() {
            Calendar calendar = Calendar.getInstance();
            String created = calendar.get(Calendar.YEAR) + "年"
                    + calendar.get(Calendar.MONTH) + "月"
                    + calendar.get(Calendar.DAY_OF_MONTH) + "日"
                    + calendar.get(Calendar.HOUR_OF_DAY) + "时"
                    + calendar.get(Calendar.MINUTE) + "分";
            return created;
        }
    }

    基本信息配置类


    import android.net.Uri;
    import android.provider.BaseColumns;


    public final class Diary {
        //这里的 AUTHORITY 要求是唯一,而且和Manifest当中provider标签的AUTHORITY内容一致
        public static final String AUTHORITY = "com.ex09_2_contentprovider.diarycontentprovider";

        private Diary() {}
       
        /**
         * Notes table
         */
        public static final class DiaryColumns implements BaseColumns {
            // This class cannot be instantiated
            private DiaryColumns() {}

            public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/diaries");


            public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.google.diary";


            public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.google.diary";


            public static final String DEFAULT_SORT_ORDER = "created DESC";

            public static final String TITLE = "title";

            public static final String BODY = "body";

            public static final String CREATED = "created";


        
        }
    }

    主页面列表

    public class ActivityMain extends ListActivity {

        // 插入一条新纪录
        public static final int MENU_ITEM_INSERT = Menu.FIRST;
        // 编辑内容
        public static final int MENU_ITEM_EDIT = Menu.FIRST + 1;
        public static final int MENU_ITEM_DELETE = Menu.FIRST + 2;

        private static final String[] PROJECTION = new String[] { DiaryColumns._ID,
                DiaryColumns.TITLE, DiaryColumns.CREATED };

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.diary_list);
            Intent intent = getIntent();
            if (intent.getData() == null) {
                intent.setData(DiaryColumns.CONTENT_URI);
            }
            Cursor cursor = managedQuery(getIntent().getData(), PROJECTION, null,
                    null, DiaryColumns.DEFAULT_SORT_ORDER);

            SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                    R.layout.diary_row, cursor, new String[] { DiaryColumns.TITLE,
                            DiaryColumns.CREATED }, new int[] { R.id.text1,
                            R.id.created });
            setListAdapter(adapter);
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            super.onCreateOptionsMenu(menu);
            menu.add(0, MENU_ITEM_INSERT, 0, R.string.menu_insert);
            return true;
        }

        @Override
        /*
         * 在每一次menu生成的时候前都会调用这个方法,在这个方法里边可以动态的修改生成的menu。
         */
        public boolean onPrepareOptionsMenu(Menu menu) {
            super.onPrepareOptionsMenu(menu);
            final boolean haveItems = getListAdapter().getCount() > 0; //是否有数据
            if (haveItems) {
                // 如果选中一个Item的话
                if (getListView().getSelectedItemId() > 0) {
                    menu.removeGroup(1); //移除分组为一的选项也就是添加的那个按钮
                    Uri uri = ContentUris.withAppendedId(getIntent().getData(),
                            getSelectedItemId());
                    Intent intent = new Intent(null, uri); //跳转地址
                    menu.add(1, MENU_ITEM_EDIT, 1, "编辑内容").setIntent(intent);//添加两个按钮,组ID为1
                    menu.add(1, MENU_ITEM_DELETE, 1, "删除当前日记");
                }

            }else{
                menu.removeGroup(1);
            }
            return true;
        }

        //点选后的回调事件。
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            // 插入一条数据
            case MENU_ITEM_INSERT:
                Intent intent0 = new Intent(this, ActivityDiaryEditor.class);
                intent0.setAction(ActivityDiaryEditor.INSERT_DIARY_ACTION);
                intent0.setData(getIntent().getData());
                startActivity(intent0);
                return true;
                // 编辑当前数据内容
            case MENU_ITEM_EDIT:
                Intent intent = new Intent(this, ActivityDiaryEditor.class);
                intent.setData(item.getIntent().getData());
                intent.setAction(ActivityDiaryEditor.EDIT_DIARY_ACTION);
                startActivity(intent);
                return true;
                // 删除当前数据
            case MENU_ITEM_DELETE:
                Uri uri = ContentUris.withAppendedId(getIntent().getData(),
                        getListView().getSelectedItemId());
                getContentResolver().delete(uri, null, null);
                renderListView();

            }
            return super.onOptionsItemSelected(item);
        }

        @Override
        protected void onListItemClick(ListView l, View v, int position, long id) {
            Uri uri = ContentUris.withAppendedId(getIntent().getData(), id);
            startActivity(new Intent(ActivityDiaryEditor.EDIT_DIARY_ACTION, uri));

        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode,
                Intent intent) {
            super.onActivityResult(requestCode, resultCode, intent);
            //renderListView();
        }

        private void renderListView() {
            Cursor cursor = managedQuery(getIntent().getData(), PROJECTION, null,
                    null, DiaryColumns.DEFAULT_SORT_ORDER);

            SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                    R.layout.diary_row, cursor, new String[] { DiaryColumns.TITLE,
                            DiaryColumns.CREATED }, new int[] { R.id.text1,
                            R.id.created });
            setListAdapter(adapter);
        }
    }

    编辑页面


    import android.app.Activity;
    import android.content.ContentValues;
    import android.content.Intent;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;

    import com.eoeAndroid.contentProvider.Diary.DiaryColumns;

    public class ActivityDiaryEditor extends Activity {
        private static final String TAG = "Diary";
        public static final String EDIT_DIARY_ACTION = "com.ex09_2_contentProvider.ActivityDiaryEditor.EDIT_DIARY";
        public static final String INSERT_DIARY_ACTION = "com.ex09_2_contentProvider.ActivityDiaryEditor.action.INSERT_DIARY";

        /**
         * 查询cursor时候,感兴趣的那些条例。
         */
        private static final String[] PROJECTION = new String[] { DiaryColumns._ID, // 0
                DiaryColumns.TITLE, DiaryColumns.BODY, // 1
        };

        private static final int STATE_EDIT = 0;
        private static final int STATE_INSERT = 1;

        private int mState;

        private Uri mUri;
        private Cursor mCursor;

        private EditText mTitleText;
        private EditText mBodyText;
        private Button confirmButton;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setTheme(android.R.style.Theme_Black);
            final Intent intent = getIntent();
            final String action = intent.getAction();
            setContentView(R.layout.diary_edit);
           
            mTitleText = (EditText) findViewById(R.id.title);
            mBodyText = (EditText) findViewById(R.id.body);
            confirmButton = (Button) findViewById(R.id.confirm);

            if (EDIT_DIARY_ACTION.equals(action)) {// 编辑日记
                mState = STATE_EDIT;
                mUri = intent.getData();
                mCursor = managedQuery(mUri, PROJECTION, null, null, null);
                mCursor.moveToFirst();
                String title = mCursor.getString(1);
                mTitleText.setTextKeepState(title);
                String body = mCursor.getString(2);
                mBodyText.setTextKeepState(body);
                setResult(RESULT_OK, (new Intent()).setAction(mUri.toString()));
                setTitle("编辑日记");
            } else if (INSERT_DIARY_ACTION.equals(action)) {// 新建日记
                mState = STATE_INSERT;
                setTitle("新建日记");
            } else {
                Log.e(TAG, "no such action error");
                finish();
                return;
            }

            confirmButton.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    if (mState == STATE_INSERT) {
                        insertDiary();
                    } else {
                        updateDiary();
                    }
                    Intent mIntent = new Intent();
                    setResult(RESULT_OK, mIntent);
                    finish();
                }

            });

        }

        private void insertDiary() {
            String title = mTitleText.getText().toString();
            String body = mBodyText.getText().toString();
            ContentValues values = new ContentValues();
            values.put(Diary.DiaryColumns.CREATED, DiaryContentProvider
                    .getFormateCreatedDate());
            values.put(Diary.DiaryColumns.TITLE, title);
            values.put(Diary.DiaryColumns.BODY, body);
            getContentResolver().insert(Diary.DiaryColumns.CONTENT_URI, values);

        }

        private void updateDiary() {
            String title = mTitleText.getText().toString();
            String body = mBodyText.getText().toString();
            ContentValues values = new ContentValues();
            values.put(Diary.DiaryColumns.CREATED, DiaryContentProvider
                    .getFormateCreatedDate());
            values.put(Diary.DiaryColumns.TITLE, title);
            values.put(Diary.DiaryColumns.BODY, body);
            getContentResolver().update(mUri, values,
                    null, null);

        }
    }

  • 相关阅读:
    call()与apply()的作用与区别
    Tomcat8/9的catalina.out中文乱码问题解决
    怎样查看Jenkins的版本
    每日日报2020.8.18
    528. Random Pick with Weight
    875. Koko Eating Bananas
    721. Accounts Merge
    515. Find Largest Value in Each Tree Row
    286. Walls and Gates (Solution 1)
    408. Valid Word Abbreviation
  • 原文地址:https://www.cnblogs.com/finehappy/p/2057145.html
Copyright © 2011-2022 走看看