Android:自定义ContentProvider

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

1.创建一个类继承SQLiteOpenHelper(若使用SQLite):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public  class  MySQLiteHelper  extends  SQLiteOpenHelper
{
     //重写构造方法
     public  MySQLiteHelper(Context context, String name, CursorFactory factory,
             int  version)
     {
         super (context, name, factory, version);
     }
     //创建表
     @Override
     public  void  onCreate(SQLiteDatabase db)
     {
         db.execSQL( "CREATE TABLE person(personid INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20),phone VARCHAR(20))"  );
     }
     //升级表(当Database的Version低于当前new里的Version,直接执行下面方法)
     @Override
     public  void  onUpgrade(SQLiteDatabase db,  int  oldVersion,  int  newVersion)
     {
                                             
         int  v = newVersion - oldVersion;
         if (v >  0 )
         {
             db.execSQL( "ALTER TABLE person ADD salary3 VARCHAR(20)" );
         }
     }
}


2.创建自定义ContentProvider:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public  class  MyContentProvider  extends  ContentProvider
{
     private  MySQLiteHelper mDBHelper;
                
     public  MyContentProvider()
     {
     }
                
     @Override
     public  int  delete(Uri uri, String selection, String[] selectionArgs)
     {
         SQLiteDatabase db = mDBHelper.getWritableDatabase();
         int  i = db.delete( "person" , selection,selectionArgs);
         return  i;
     }
                
     @Override
     public  String getType(Uri uri)
     {
         throw  new  UnsupportedOperationException( "Not yet implemented" );
     }
                
     //创建Uri
     private  static  final  Uri URI = Uri.parse( "content://com.example.cpone" );
                
     @Override //插入
     public  Uri insert(Uri uri, ContentValues values)
     {
         SQLiteDatabase db = mDBHelper.getWritableDatabase();
         long  id = db.insert( "person" null  , values);
         return  ContentUris.withAppendedId(URI, id);  //相当于原先的Uri加上插入的行号
                    
     }
                
     @Override
     public  boolean  onCreate() //创建表
     {
         mDBHelper =  new  MySQLiteHelper(getContext(),  "person" null 1 );
         return  false ;
     }
                
     @Override //查询
     public  Cursor query(Uri uri, String[] projection, String selection,
             String[] selectionArgs, String sortOrder)
     {
         SQLiteDatabase db = mDBHelper.getWritableDatabase();
         Cursor cursor = db.query( "person" , projection, selection, selectionArgs,  null null , sortOrder);
         return  cursor;
     }
                
     @Override //修改
     public  int  update(Uri uri, ContentValues values, String selection,
             String[] selectionArgs)
     {
         SQLiteDatabase db = mDBHelper.getWritableDatabase();
         int  i = db.update( "person" , values, selection, selectionArgs);
         return  i;
     }
}


3.在另一个项目里使用自定义ContentProvider:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public  class  MyContentProvider  extends  ContentProvider
{
     private  MySQLiteHelper mDBHelper;
         
     public  MyContentProvider()
     {
     }
         
     @Override
     public  int  delete(Uri uri, String selection, String[] selectionArgs)
     {
         SQLiteDatabase db = mDBHelper.getWritableDatabase();
         int  i = db.delete( "person" , selection,selectionArgs);
         return  i;
     }
         
     @Override
     public  String getType(Uri uri)
     {
         throw  new  UnsupportedOperationException( "Not yet implemented" );
     }
         
     //创建Uri
     private  static  final  Uri URI = Uri.parse( "content://com.example.cpone" );
         
     @Override //插入
     public  Uri insert(Uri uri, ContentValues values)
     {
         SQLiteDatabase db = mDBHelper.getWritableDatabase();
         long  id = db.insert( "person" null  , values);
         return  ContentUris.withAppendedId(URI, id);  //相当于原先的Uri加上插入的行号
             
     }
         
     @Override
     public  boolean  onCreate() //创建表
     {
         mDBHelper =  new  MySQLiteHelper(getContext(),  "person" null 1 );
         return  false ;
     }
         
     @Override //查询
     public  Cursor query(Uri uri, String[] projection, String selection,
             String[] selectionArgs, String sortOrder)
     {
         SQLiteDatabase db = mDBHelper.getWritableDatabase();
         Cursor cursor = db.query( "person" , projection, selection, selectionArgs,  null null , sortOrder);
         return  cursor;
     }
         
     @Override //修改
     public  int  update(Uri uri, ContentValues values, String selection,
             String[] selectionArgs)
     {
         SQLiteDatabase db = mDBHelper.getWritableDatabase();
         int  i = db.update( "person" , values, selection, selectionArgs);
         return  i;
     }
}



注:

1.ContentProvider仍在主线程上运行,但对他的调用是异步的,不使用消息队列。





本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1217552,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
存储 Shell Android开发
基于Android P,自定义Android开机动画的方法
本文详细介绍了基于Android P系统自定义开机动画的步骤,包括动画文件结构、脚本编写、ZIP打包方法以及如何将自定义动画集成到AOSP源码中。
45 2
基于Android P,自定义Android开机动画的方法
|
29天前
|
供应链 物联网 区块链
未来触手可及:探索新兴技术的趋势与应用安卓开发中的自定义视图:从基础到进阶
【8月更文挑战第30天】随着科技的飞速发展,新兴技术如区块链、物联网和虚拟现实正在重塑我们的世界。本文将深入探讨这些技术的发展趋势和应用场景,带你领略未来的可能性。
|
30天前
|
测试技术 Android开发 Python
探索软件测试的艺术:从基础到高级安卓应用开发中的自定义视图
【8月更文挑战第29天】在软件开发的世界中,测试是不可或缺的一环。它如同艺术一般,需要精细的技巧和深厚的知识。本文旨在通过浅显易懂的语言,引领读者从软件测试的基础出发,逐步深入到更复杂的测试策略和工具的使用,最终达到能够独立进行高效测试的水平。我们将一起探索如何通过不同的测试方法来确保软件的质量和性能,就像艺术家通过不同的色彩和笔触来完成一幅画作一样。
|
8天前
|
Android开发 开发者
安卓开发中的自定义视图:从入门到精通
【9月更文挑战第19天】在安卓开发的广阔天地中,自定义视图是一块充满魔力的土地。它不仅仅是代码的堆砌,更是艺术与科技的完美结合。通过掌握自定义视图,开发者能够打破常规,创造出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战应用,一步步展示如何用代码绘出心中的蓝图。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往创意和效率的大门。让我们一起探索自定义视图的秘密,将你的应用打造成一件艺术品吧!
31 10
|
13天前
|
XML 编解码 Android开发
安卓开发中的自定义视图控件
【9月更文挑战第14天】在安卓开发中,自定义视图控件是一种高级技巧,它可以让开发者根据项目需求创建出独特的用户界面元素。本文将通过一个简单示例,引导你了解如何在安卓项目中实现自定义视图控件,包括创建自定义控件类、处理绘制逻辑以及响应用户交互。无论你是初学者还是有经验的开发者,这篇文章都会为你提供有价值的见解和技巧。
25 3
|
14天前
|
前端开发 Android开发 开发者
安卓应用开发中的自定义视图基础
【9月更文挑战第13天】在安卓开发的广阔天地中,自定义视图是一块神奇的画布,它允许开发者将想象力转化为用户界面的创新元素。本文将带你一探究竟,了解如何从零开始构建自定义视图,包括绘图基础、触摸事件处理,以及性能优化的实用技巧。无论你是想提升应用的视觉吸引力,还是追求更流畅的交互体验,这里都有你需要的金钥匙。
|
17天前
|
缓存 搜索推荐 Android开发
安卓应用开发中的自定义View组件实践
【9月更文挑战第10天】在安卓开发领域,自定义View是提升用户体验和实现界面个性化的重要手段。本文将通过一个实际案例,展示如何在安卓项目中创建和使用自定义View组件,包括设计思路、实现步骤以及可能遇到的问题和解决方案。文章不仅提供了代码示例,还深入探讨了自定义View的性能优化技巧,旨在帮助开发者更好地掌握这一技能。
|
29天前
|
XML 搜索推荐 Android开发
安卓开发中的自定义View组件实践
【8月更文挑战第30天】探索Android世界,自定义View是提升应用界面的关键。本文以简洁的语言带你了解如何创建自定义View,从基础到高级技巧,一步步打造个性化的UI组件。
|
1月前
|
Android开发
Android在rootdir根目录创建自定义目录和挂载点的方法
本文介绍了在Android高通平台的根目录下创建自定义目录和挂载点的方法,通过修改Android.mk文件并使用`LOCAL_POST_INSTALL_CMD`变量在编译过程中添加目录,最终在ramdisk.img的系统根路径下成功创建了`/factory/bin`目录。
81 1
|
21天前
|
前端开发 搜索推荐 Android开发
探索安卓开发中的自定义视图##
【9月更文挑战第6天】 在安卓应用开发的世界里,自定义视图如同绘画艺术中的色彩,它们为界面设计增添了无限可能。通过掌握自定义视图的绘制技巧,开发者能够创造出既符合品牌形象又提升用户体验的独特界面元素。本文将深入浅出地介绍如何从零开始构建一个自定义视图,包括基础框架搭建、关键绘图方法实现、事件处理机制以及性能优化策略。准备好让你的安卓应用与众不同了吗?让我们开始吧! ##