什么是内容提供者:内容提供者是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. android中在子线程中更新UI的几种方法
  2. Android Studio调错误方法
  3. Android动态设置Margin的方法
  4. java.lang.Exception: 密钥库文件不存在: ~/.android/debug.keys
  5. 待验证内容。
  6. Android TextView内容居中和控件居中
  7. Android向通讯录添加联系人的一般方法
  8. Android点赞动画效果 ,点赞后加一,2种方法,①补间动画②位移动画
  9. Android 闪屏页 全屏设置方法

随机推荐

  1. Android(安卓)MapView 申请apiKey
  2. Android的消息机制
  3. Android(安卓)Studio 2.0 Instant Run问
  4. Gradle依赖总结
  5. Android(安卓)View 的工作原理浅析
  6. View机制深入学习(一)
  7. 【Gradle】自定义Android(安卓)Gradle工
  8. Android中通过资源文件获取drawable的几
  9. android 如何查找内存泄漏
  10. Application Fundamentals-Components