zoukankan      html  css  js  c++  java
  • 内容提供者

    一、继承ContentProvider

    package com.shz.provider;
    
    import com.shz.dao.SQLiteHelper;
    
    import android.content.ContentProvider;
    import android.content.ContentUris;
    import android.content.ContentValues;
    import android.content.UriMatcher;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.net.Uri;
    
    public class PersonProvider extends ContentProvider {
    
        private SQLiteHelper helper;
        private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
        private static final int INSERT = 1;
        private static final int DELETE = 2;
        private static final int UPDATE = 3;
        private static final int QUERY = 4;
        private static final int SINGLE = 5;
    
        static {
            matcher.addURI("db.personprovider", "insert", INSERT);
            matcher.addURI("db.personprovider", "delete", DELETE);
            matcher.addURI("db.personprovider", "update", UPDATE);
            matcher.addURI("db.personprovider", "query", QUERY);
            matcher.addURI("db.personprovider", "query/#", SINGLE);
        }
    
        @Override
        public boolean onCreate() {
            this.helper = new SQLiteHelper(getContext());
            return false;
        }
    
        @Override
        public Cursor query(Uri uri, String[] projection, String selection,
                String[] selectionArgs, String sortOrder) {
            if (matcher.match(uri) == QUERY) {
                SQLiteDatabase db = this.helper.getReadableDatabase();
                Cursor cursor = db.query("person", projection, selection,
                        selectionArgs, null, null, sortOrder);
                return cursor;
            } else if (matcher.match(uri) == SINGLE) {
                long id = ContentUris.parseId(uri);
                SQLiteDatabase db = this.helper.getReadableDatabase();
                Cursor cursor = db.query("person", projection, "id=?",
                        new String[] { String.valueOf(id) }, null, null, sortOrder);
                return cursor;
            } else {
                throw new IllegalArgumentException("Uri参数不匹配");
            }
        }
    
        @Override
        public String getType(Uri uri) {
            if (matcher.match(uri) == QUERY) {
                return "vnd.android.cursor.dir/person";
            } else if (matcher.match(uri) == SINGLE) {
                return "vnd.android.cursor.item/person";
            }
            return null;
        }
    
        @Override
        public Uri insert(Uri uri, ContentValues values) {
            if (matcher.match(uri) == INSERT) {
                SQLiteDatabase db = this.helper.getWritableDatabase();
                db.insert("person", null, values);
            }
    
            // 通知观察者数据已发生改变
            getContext().getContentResolver().notifyChange(uri, null);
            return uri;
        }
    
        @Override
        public int delete(Uri uri, String selection, String[] selectionArgs) {
            int result = 0;
            if (matcher.match(uri) == DELETE) {
                SQLiteDatabase db = this.helper.getWritableDatabase();
                result = db.delete("person", selection, selectionArgs);
            }
    
            // 通知观察者数据已发生改变
            getContext().getContentResolver().notifyChange(uri, null);
            return result;
        }
    
        @Override
        public int update(Uri uri, ContentValues values, String selection,
                String[] selectionArgs) {
            int result = 0;
            if (matcher.match(uri) == UPDATE) {
                SQLiteDatabase db = this.helper.getWritableDatabase();
                result = db.update("person", values, selection, selectionArgs);
            }
    
            // 通知观察者数据已发生改变
            getContext().getContentResolver().notifyChange(uri, null);
            return result;
        }
    
    }

    二、调用方法

    package com.shz.testprovider;
    
    import java.util.Random;
    
    import android.app.Activity;
    import android.content.ContentResolver;
    import android.content.ContentValues;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    
    public class MainActivity extends Activity {
    
        private static final String TAG = "testprovider";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
        }
    
        public void queryAll(View view) {
            ContentResolver resolver = this.getContentResolver();
            Uri uri = Uri.parse("content://db.personprovider/query");
            Cursor c = resolver.query(uri, null, null, null, null);
            while (c.moveToNext()) {
                Log.i(TAG, "姓名:" + c.getString(c.getColumnIndex("name")));
            }
    
            c.close();
        }
    
        public void querySingle(View view) {
            ContentResolver resolver = this.getContentResolver();
            Uri uri = Uri.parse("content://db.personprovider/query/7");
            Cursor c = resolver.query(uri, null, null, null, null);
            while (c.moveToNext()) {
                Log.i(TAG, "姓名:" + c.getString(c.getColumnIndex("name")));
            }
    
            c.close();
        }
    
        public void insert(View view) {
            ContentResolver resolver = this.getContentResolver();
            Uri uri = Uri.parse("content://db.personprovider/insert");
            ContentValues values = new ContentValues();
            Random rand = new Random();
            values.put("name", "shz" + rand.nextInt(100));
            values.put("gender", "男");
            values.put("account", rand.nextInt(10000));
            resolver.insert(uri, values);
        }
    
        public void update(View view) {
            ContentResolver resolver = this.getContentResolver();
            Uri uri = Uri.parse("content://db.personprovider/update");
            ContentValues values = new ContentValues();
            Random rand = new Random();
            values.put("name", "dhf" + rand.nextInt(100));
            values.put("gender", "女");
            values.put("account", rand.nextInt(10000));
            resolver.update(uri, values, "id=1", new String[] { 5 + "" });
        }
    
        public void delete(View view) {
            ContentResolver resolver = this.getContentResolver();
            Uri uri = Uri.parse("content://db.personprovider/delete");
            Random rand = new Random();
            resolver.delete(uri, "id=?", new String[] { rand.nextInt(10) + "" });
        }
    
    }

     三、AndroidManifest清单文件

    <instrumentation
            android:name="android.test.InstrumentationTestRunner"
            android:targetPackage="com.shz.db" />
    
    <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <uses-library android:name="android.test.runner" />
    
            <activity
                android:name="com.shz.db.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <provider
                android:name="com.shz.provider.PersonProvider"
                android:authorities="db.personprovider"
                android:exported="true" >
            </provider>
        </application>
  • 相关阅读:
    Atlassian In Action-Jira之核心配置(二)
    mybatis的插入与批量插入的返回ID的原理
    Atlassian In Action-Jira之指导思想(一)
    Atlassian In Action
    如何进行软件技术管理?
    [simple-orm-mybaits]基于Mybatis的ORM封装介绍
    Java利用Mybatis进行数据权限控制
    给大家推荐一个Java学习和面试的GitHub项目
    立志
    一勤天下无难事
  • 原文地址:https://www.cnblogs.com/shaomenghao/p/3905754.html
Copyright © 2011-2022 走看看