什么是内容提供者:内容提供者是Android中的四大组件之一,可以将应用程序中的数据对外共享,我们创建一个内容提供者,通过通用的接口将数据共享。

首先要继承类 ContentProvider 对父类的方法进行重新实现


package com.example.contentprovider;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 MyContentProvider extends ContentProvider {// 自己实现的数据库操作帮助类private MyOpenHelper myOpenHelper; // 数据库相关类      private SQLiteDatabase sqLiteDatabase;      // uri匹配相关private static UriMatcher uriMatcher;// 主机名称(这一部分是可以随便取得)private static final String authority = "com.example.contentprovider";    // 数据表名      private final String Table_Name = "Content";  // 注册该内容提供者匹配的uristatic {uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);/* * path_chenzheng部分的字符串是随便取得,1代表着如果请求的uri与当前加入 * 的匹配uri正好吻合,uriMathcher.match()方法返回的值.#代表任意数字,*代表任意字符串 */uriMatcher.addURI(authority, "add", 1);// 代表当前表中的所有的记录uriMatcher.addURI(authority, "add/#", 2);// 代表当前表中的某条特定的记录}// 数据表中的列名映射private static final String _id = "id";private static final String name = "name";private static final String age = "age";private static final String isMan = "isMan";  // 版本号      private final int Version_1 = 1;@Overridepublic boolean onCreate() {try {myOpenHelper = new MyOpenHelper(getContext(), "TestDB", null,Version_1);} catch (Exception e) {return false;}return true;}@Overridepublic Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {sqLiteDatabase = myOpenHelper.getWritableDatabase();Cursor c = sqLiteDatabase.query(Table_Name, new String[]{"id","name","age"}, null, null, null, null, null);return c;}/** * @description 获取当前内容提供者的MIME类型 集合类型必须添加前缀vnd.android.cursor.dir/(该部分随意) *              单条记录类型添加前缀vnd,android.cursor.item/(该部分随意) *              定义了该方法之后,系统会在第一次请求时进行验证,验证通过则执行crub方法时不再重复进行验证, *              否则如果没有定义该方法或者验证失败,crub方法执行的时候系统会默认的为其添加类型验证代码。 */@Overridepublic String getType(Uri uri) {int code = uriMatcher.match(uri);switch (code) {case 1:return "vnd.android.cursor.dir/chenzheng_java";case 2:return "vnd.android.cursor.item/chenzheng_java";default:throw new IllegalArgumentException("异常参数");}}@Overridepublic Uri insert(Uri uri, ContentValues values) {sqLiteDatabase = myOpenHelper.getWritableDatabase();int code = uriMatcher.match(uri);switch (code) {case 1:sqLiteDatabase.insert(Table_Name, name, values);  break;default:throw new IllegalArgumentException("异常参数");}return uri;}@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) {return 0;}@Overridepublic int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {int num = 0;  sqLiteDatabase = myOpenHelper.getWritableDatabase();int code = uriMatcher.match(uri);  switch (code) {case 1:num = sqLiteDatabase.update(Table_Name, values, selection, selectionArgs);  break;case 2:              long id = ContentUris.parseId(uri);              selection = (selection == null || "".equals(selection.trim())) ? _id                      + "=" + id                      : selection + " and " + _id + "=" + id;              num = sqLiteDatabase.update(Table_Name, values, selection, selectionArgs);  break;default:throw new IllegalArgumentException("异常参数");}return num;}}

内容提供者使用Uri来操作数据,Uri包含了两部分:① 需要操作的内容提供者,② 要操作的数据


Activity 代码

package com.example.contentprovider;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;import android.widget.TextView;public class ContentProviderActivity extends Activity {ContentResolver reslover;Uri uri;String result = "结果:/n";private final static String tag = "通知";  private TextView textView; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);textView = (TextView) findViewById(R.id.textView);uri = Uri.parse("content://com.example.contentprovider/add");  reslover = getContentResolver();}public void insertContent(View view){insert(reslover,uri);}public void updateContent(View view){update(reslover,uri);}public void queryContent(View view) {Cursor cursor = query(reslover, uri);while(cursor.moveToNext()){System.out.println(cursor.getInt(cursor.getColumnIndex("id")));System.out.println(cursor.getString(cursor.getColumnIndex("name")));System.out.println(cursor.getString(cursor.getColumnIndex("age")));}}private Cursor query(ContentResolver resolver, Uri uri){Cursor cursor = resolver.query(uri, null, null, null, null);return cursor;}private void update(ContentResolver resolver, Uri uri){        ContentValues contentValues = new ContentValues();          contentValues.put("age", 122);          int number = resolver.update(uri, contentValues, null, null);          Log.i(tag, "更新成功!");          result += "成功更新了" + number+"条记录";          textView.setText(result);          result = "";  }    private void insert(ContentResolver resolver, Uri uri) {          ContentValues contentValues = new ContentValues();          contentValues.put("id", 1);        contentValues.put("name", "张大凡");          contentValues.put("age", 30);          contentValues.put("isMan", true);          Uri uri2 = resolver.insert(uri, contentValues);          Log.i(tag, "插入成功!");          result += "成功插入了一条记录,uri为" + uri2;          textView.setText(result);          result = "";      } }


更多相关文章

  1. RK3288 Android(安卓)7.1 调试 USB MIDI
  2. Android监听Home、电源键
  3. Android动态设置Margin的方法
  4. Android(安卓)8.0 Activity启动过程分析
  5. 【Android】进程间通信IPC——Binder
  6. 详解 Android(安卓)的 Activity 组件
  7. Android(安卓)Studio调错误方法
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. Android 简单的账号密码登陆界面(IO流)
  2. Android Studio 环境问题
  3. Android 开发系列 2 Activity
  4. 为Android软件创建快捷方式
  5. Android中OnScrollListener的详解(Listvie
  6. 升级android studio至3.3.2出现WARNING:
  7. Android(安卓)颜色大全 colors.xml
  8. MTK Android Driver :sensor
  9. android 全面讲解BroadCastReceiver
  10. 选项卡片段