自定义provider

文章目录

  • AndroidManifest.xml
  • MainActivity
  • SchoolDBHelper
  • StuProvider

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.hipeak.demo0804"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.Demo0804"><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><providerandroid:authorities="com.hipeak.demo0804.stuprovider"android:name=".StuProvider"android:exported="true"android:enabled="true"/></application></manifest>

MainActivity

package com.hipeak.demo0804;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;
import android.util.Log;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;public class StuProvider extends ContentProvider {private SchoolDBHelper helper;/*** 匹配URi的容器*  构造的code:匹配不上的时候,code是多少,默认是NO_MATCH -1*/private static UriMatcher matcher=new UriMatcher(UriMatcher.NO_MATCH);private static final int CODE_STU=1;private static final int CODE_STU_ID=2;static{matcher.addURI("com.hipeak.demo0804.stuprovider","/stu",CODE_STU);matcher.addURI("com.hipeak.demo0804.stuprovider","/stu/#",CODE_STU_ID);}//当应用启动的时候创建StuProvider对象,当创建对象的时候onCreate()//初始化helper
//    private@Overridepublic boolean onCreate() {Log.d("", "===onCteate");helper=new SchoolDBHelper(getContext(),1);return false;}/**** @param uri  一个资源的唯一标识* @param projection 多个字段* @param selection where条件 如:id=?and name=?* @param selectionArgs  where条件需要的值* @param sortOrder 排序规则* @return** content://com.hipeak.demo0804.stuprovider/stu    不根据id查询* content://com.hipeak.demo0804.stuprovider/stu/1  根据id查询*/@Nullable@Overridepublic Cursor query(@NonNull Uri uri,@Nullable String[] projection,@Nullable String selection,@Nullable String[] selectionArgs,@Nullable String sortOrder) {SQLiteDatabase db = helper.getReadableDatabase();int code = matcher.match(uri);switch(code){case CODE_STU:return db.query("stu",projection,selection,selectionArgs,null,null,sortOrder);case CODE_STU_ID://TODO uri中的id获取long id=ContentUris.parseId(uri);//uri中的idreturn db.query("stu",projection,"_id=?",new String[]{id+""},null,null,sortOrder);default:Log.e("","Uri不符合规则");throw new RuntimeException("Uri不符合规则");}}@Nullable@Overridepublic String getType(@NonNull Uri uri) {return null;}//* * content://com.hipeak.demo0804.stuprovider/stu    不根据插入@Nullable@Overridepublic Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {SQLiteDatabase db = helper.getWritableDatabase();int code =matcher.match(uri);if(code==CODE_STU){long id = db.insert("stu", null, values);Log.d("","id==="+id);db.close();return ContentUris.withAppendedId(uri,id);}else{Log.e("","Uri不符合规则");db.close();throw new RuntimeException("Uri不符合规则");}}/***  content://com.hipeak.demo0804.stuprovider/stu    不根据id删除*  content://com.hipeak.demo0804.stuprovider/stu/1  根据id删除* @param uri* @param selection* @param selectionArgs* @return*/@Overridepublic int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {SQLiteDatabase db = helper.getWritableDatabase();int code=matcher.match(uri);int count=0;switch(code){case CODE_STU:count = db.delete("stu", selection, selectionArgs);//删掉了几行db.close();break;case CODE_STU_ID:long id=ContentUris.parseId(uri);count=db.delete("stu","_id=?",new String[]{id+""});db.close();break;default:throw new RuntimeException("Uri不符合规则");}return count;}@Overridepublic int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {return 0;}}

SchoolDBHelper

package com.hipeak.demo0804;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;import androidx.annotation.Nullable;public class SchoolDBHelper extends SQLiteOpenHelper {private static final String DB_NAME="school.db";public SchoolDBHelper(@Nullable Context context, int version) {super(context, DB_NAME, null, version);}@Overridepublic void onCreate(SQLiteDatabase sqLiteDatabase) {//String sql="create table stu(" +"_id integer primary key autoincrement" +",name text" +",age integer );";sqLiteDatabase.execSQL(sql);String sql2="insert into stu(name,age) values('张三',21),('李四',21),('王五',26)" ;sqLiteDatabase.execSQL(sql2);}@Overridepublic void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {}
}

StuProvider

package com.hipeak.demo0804;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;
import android.util.Log;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;public class StuProvider extends ContentProvider {private SchoolDBHelper helper;/*** 匹配URi的容器*  构造的code:匹配不上的时候,code是多少,默认是NO_MATCH -1*/private static UriMatcher matcher=new UriMatcher(UriMatcher.NO_MATCH);private static final int CODE_STU=1;private static final int CODE_STU_ID=2;static{matcher.addURI("com.hipeak.demo0804.stuprovider","/stu",CODE_STU);matcher.addURI("com.hipeak.demo0804.stuprovider","/stu/#",CODE_STU_ID);}//当应用启动的时候创建StuProvider对象,当创建对象的时候onCreate()//初始化helper
//    private@Overridepublic boolean onCreate() {Log.d("", "===onCteate");helper=new SchoolDBHelper(getContext(),1);return false;}/**** @param uri  一个资源的唯一标识* @param projection 多个字段* @param selection where条件 如:id=?and name=?* @param selectionArgs  where条件需要的值* @param sortOrder 排序规则* @return** content://com.hipeak.demo0804.stuprovider/stu    不根据id查询* content://com.hipeak.demo0804.stuprovider/stu/1  根据id查询*/@Nullable@Overridepublic Cursor query(@NonNull Uri uri,@Nullable String[] projection,@Nullable String selection,@Nullable String[] selectionArgs,@Nullable String sortOrder) {SQLiteDatabase db = helper.getReadableDatabase();int code = matcher.match(uri);switch(code){case CODE_STU:return db.query("stu",projection,selection,selectionArgs,null,null,sortOrder);case CODE_STU_ID://TODO uri中的id获取long id=ContentUris.parseId(uri);//uri中的idreturn db.query("stu",projection,"_id=?",new String[]{id+""},null,null,sortOrder);default:Log.e("","Uri不符合规则");throw new RuntimeException("Uri不符合规则");}}@Nullable@Overridepublic String getType(@NonNull Uri uri) {return null;}//* * content://com.hipeak.demo0804.stuprovider/stu    不根据插入@Nullable@Overridepublic Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {SQLiteDatabase db = helper.getWritableDatabase();int code =matcher.match(uri);if(code==CODE_STU){long id = db.insert("stu", null, values);Log.d("","id==="+id);db.close();return ContentUris.withAppendedId(uri,id);}else{Log.e("","Uri不符合规则");db.close();throw new RuntimeException("Uri不符合规则");}}/***  content://com.hipeak.demo0804.stuprovider/stu    不根据id删除*  content://com.hipeak.demo0804.stuprovider/stu/1  根据id删除* @param uri* @param selection* @param selectionArgs* @return*/@Overridepublic int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {SQLiteDatabase db = helper.getWritableDatabase();int code=matcher.match(uri);int count=0;switch(code){case CODE_STU:count = db.delete("stu", selection, selectionArgs);//删掉了几行db.close();break;case CODE_STU_ID:long id=ContentUris.parseId(uri);count=db.delete("stu","_id=?",new String[]{id+""});db.close();break;default:throw new RuntimeException("Uri不符合规则");}return count;}@Overridepublic int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {return 0;}}break;default:throw new RuntimeException("Uri不符合规则");}return count;}@Overridepublic int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {return 0;}}

自定义provider相关推荐

  1. ASP.NET 2.0中使用自定义provider (2)

    ASP.NET 2.0中使用自定义provider (2) 在tech ed 2005上,有对asp.net 2.0的介绍,其中讲到asp.net 2.0提供了很多功能,让程序员做少很多东西,这引起了 ...

  2. 3. Nest Provider

    Providers Providers 是 Nest 的一个基本概念.许多基本的 Nest 类可能被视为 provider - service,repository, factory, helper  ...

  3. JCO 自定义DestinationDataProvider

    要让JAVA程序能访问SAP系统,一般通过SAP JCO接口进行通讯,在获取到SAP的连接时需求提供一些连接参数,这些参数在最新的 JCO 3.0 中需要被保存到一个带有扩展名.jcoDestinat ...

  4. 实现自己的.NET Core配置Provider之EF

    <10分钟就能学会.NET Core配置>里详细介绍了.NET Core配置的用法,另外我还开源了自定义的配置Provider:EF配置Provider和Yaml配置Provider.本文 ...

  5. 实现.NET Core配置Provider之EF

    <10分钟就能学会.NET Core配置>里详细介绍了.NET Core配置的用法另外我还开源了自定义的配置ProviderEF配置Provider和Yaml配置Provider.本文先来 ...

  6. 在ASP.NET AJAX中使用应用程序服务和本地化(5):自定义应用程序服务的服务器端实现...

    本文来自<ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关>的第五章<应用程序服务和本地化>. 身份认证与用户个性化等应用程序 ...

  7. spring security——学习笔记(day05)-实现自定义 AuthenticationProvider身份认证-手机号码认证登录

    目录 5.2 自定义 Provider 身份认证 5.2.1 编码思路和疑问 5.2.2 创建用户信息配置类 PhonePasswordAuthenticationToken 5.2.2 修改自定义的 ...

  8. 高性能ORM框架XLinq功能详细介绍

    之前简单介绍了XLinq的一些功能,有很多功能都没有提到,现在给XLinq加了一些功能,这次把所有功能都介绍一遍. 设计目标 易用性 在使用一个框架的时候 应该没几个人会喜欢写一大堆的配置文件吧 也应 ...

  9. Enterprise Library 2.0 Hands On Lab 翻译(12):安全应用程序块(一)

    练习1:应用程序安全性<?XML:NAMESPACE PREFIX = O /> 通过该练习将在一个已经存在的应用程序中添加认证和基于角色的授权. 第一步 打BugSmak.sln项目,默 ...

最新文章

  1. linux aptana,Ubuntu 下Aptana Studio 3安装使用
  2. Spring Boot实践--CommandLineRunner接口
  3. 点击文字弹出一个DIV层窗口代码 【或FORM表单 并且获取点击按钮的ID值】
  4. Spring4新特性——核心容器的其他改进
  5. Prn.txt Con.txt(文件命名的问题)
  6. 【持续更新】JAVA面向对象多线程编程的一些tips
  7. [php]数据结构算法(PHP描述) 半折插入排序 straight binary sort
  8. java 监听写文件的进度_java读取文件显示进度条的实现方法
  9. .net runtime占用cpu_.net 中的StringBuilder和TextWriter区别
  10. C#接口归纳总结实例详解
  11. C#灰度图转伪彩色图
  12. 软件设计师考c语言,软件设计师教程考点精讲之C语言三大定律
  13. Huffman编码的设计与实现
  14. 循环的各种形式(不拘一格编程序之四)
  15. 【ES8(2017)】Object 扩展 values() / entries() / getOwnPropertyDescriptors()
  16. 韩国巨型机器人曝光,走一步地动山摇
  17. Uber 宣布将香港最低打车费用上涨 80%, 最低 45 港币
  18. java改变实参_java中引用传递问题,在函数中修改引用的指向,会不会影响实参?...
  19. mysqldump导出不包含存储过程
  20. 如何把门禁卡做成你用不起的样子?B站up主自制迷你卡片,公司小区通刷,还带墨水屏的那种...

热门文章

  1. 【贪玩巴斯】数字信号处理Digital Signal Processing(DSP)——第三节「离散时间 系统 详解」2021-09-29
  2. 从尾到头打印链表(C++和Python 实现)
  3. Debian Iptables 配置教程
  4. java 阴历阳历转换
  5. Win10关闭登录面板毛玻璃效果
  6. H3C交换机DHCP Snooping抑制局域网内非法dhcp
  7. lua服务器客户端消息回调,lua服务器客户端消息回调
  8. 前台服务 StartForeground
  9. 抓娃娃机vue版本和jquery版本
  10. ssm电商背景下精品茶网站的设计与实现毕业设计-附源码191732