Android 自定义ContentProvider简单实例

Android允许我们定义自己的的ContentProvider对象来共享数据,练练手,简单来实现一下。
要使用ContentProvider来操作数据,必须要有保存数据的场所。可以使用文件或SQLite数据库的方式来保存数据,通常使用SQLite数据库。
1,创建一个数据库帮助类,归根结底都是它在操作数据库。代码如下:
package com.njue;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DBManager extends SQLiteOpenHelper {
public static final String myProvider_table_name="myProvider_table_name";
String sql="create table myProvider_table_name(id integer,name text)";
public DBManager(Context context) {
super(context, "myPrivoder.db", null, 1);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase arg0) {
// TODO Auto-generated method stub
arg0.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
2,创建一个myProvider类,该类继承ContentProvider,实现其抽象方法来操作数据库,该类引用DBManager类来获得数据库实例。
package com.njue;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
public class myProvider extends ContentProvider {
DBManager dbHelper;
@Override
public int delete(Uri arg0, String arg1, String[] arg2) {
// TODO Auto-generated method stub
SQLiteDatabase db=dbHelper.getWritableDatabase();
int id=db.delete(DBManager.myProvider_table_name, arg1, arg2);
if(id!=0)return id;
return 0;
}
@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
SQLiteDatabase db=dbHelper.getWritableDatabase();
db.insert(DBManager.myProvider_table_name, "id", values);
return null;
}
@Override
public boolean onCreate() {
// TODO Auto-generated method stub
dbHelper=new DBManager(getContext());
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
SQLiteDatabase db=dbHelper.getWritableDatabase();
Cursor c=db.query(DBManager.myProvider_table_name,projection, selection, selectionArgs, null, null, sortOrder);
return c;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO Auto-generated method stub
SQLiteDatabase db=dbHelper.getWritableDatabase();
int id=db.update(DBManager.myProvider_table_name, values, selection, selectionArgs);
if(id!=0)return id;
return 0;
}
}
3,ContextProvider必须声明才能使用,因此,需要在AndroidManifest.xml配置文件中声明。声明很简单,需要类名称和授权名称两个属性。
<provider android:name="myProvider"
android:authorities="com.njue.myProvider" />
到这里,我们自定义的ContentProvider就完成了。我们可以在Eclipse中的File Explorer 窗口中看到自定义的ContentProvider
4,简单测试
package com.njue;
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.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Content_providerActivity extends Activity {
/** Called when the activity is first created. */
Uri uri;
String AUTHORITY="content://com.njue.myProvider/myProvider_table_name";
ContentResolver cr;
EditText input;
Button insert;
TextView show;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
input=(EditText)findViewById(R.id.input);
insert=(Button)findViewById(R.id.insert);
show=(TextView)findViewById(R.id.show);
uri=uri.parse(AUTHORITY);
cr=this.getContentResolver();
insert.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ContentValues values=new ContentValues();
values.put("name", input.getText().toString());
cr.insert(uri, values);
Cursor c=cr.query(uri, null, null, null, null);
show.setText("");
c.moveToFirst();
while(c.moveToNext()){
show.append(c.getString(1)+"\r\n");
}
input.setText("");
}});
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android
# 自定义ContentProvider
# ContentProvider自定义
# 实例讲解Android中ContentProvider组件的使用方法
# Android应用中使用ContentProvider扫描本地图片并显示
# Android中自定义ContentProvider实例
# Android开发之ContentProvider的使用详解
# Android数据持久化之ContentProvider机制详解
# Android ContentProvider的实现及简单实例代码
# Android开发教程之ContentProvider数据存储
# android基础总结篇之八:创建及调用自己的ContentProvider
# Android学习笔记之ContentProvider和Uri详解
# 详解Android ContentProvider的基本原理和使用
# 自定义
# 创建一个
# 自己的
# 都是
# 要有
# 我们可以
# 希望能
# 很简单
# 可以使用
# 它在
# 谢谢大家
# 来实现
# 方法来
# 要使
# 配置文件
# 完成了
# 窗口中
# TODO
# constructor
# generated
相关文章:
如何通过免费商城建站系统源码自定义网站主题与功能?
音乐网站服务器如何优化API响应速度?
建站之星安装提示数据库无法连接如何解决?
XML的“混合内容”是什么 怎么用DTD或XSD定义
高性能网站服务器部署指南:稳定运行与安全配置优化方案
如何解决ASP生成WAP建站中文乱码问题?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
如何规划企业建站流程的关键步骤?
网站按钮制作软件,如何实现网页中按钮的自动点击?
建站ABC备案流程中有哪些关键注意事项?
如何通过宝塔面板实现本地网站访问?
焦点电影公司作品,电影焦点结局是什么?
高防服务器租用指南:配置选择与快速部署攻略
安云自助建站系统如何快速提升SEO排名?
高防服务器租用首荐平台,企业级优惠套餐快速部署
C++如何使用std::optional?(处理可选值)
MySQL查询结果复制到新表的方法(更新、插入)
Python文件管理规范_工程实践说明【指导】
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
如何选择靠谱的建站公司加盟品牌?
建站之星价格显示格式升级,你的预算足够吗?
建站主机SSH密钥生成步骤及常见问题解答?
如何彻底卸载建站之星软件?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
建站之星后台密码遗忘如何找回?
购物网站制作公司有哪些,哪个购物网站比较好?
制作宣传网站的软件,小红书可以宣传网站吗?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
如何快速搭建响应式可视化网站?
网站app免费制作软件,能免费看各大网站视频的手机app?
如何使用Golang安装API文档生成工具_快速生成接口文档
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
宝塔新建站点为何无法访问?如何排查?
建站主机默认首页配置指南:核心功能与访问路径优化
如何在云服务器上快速搭建个人网站?
怎么将XML数据可视化 D3.js加载XML
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
海南网站制作公司有哪些,海口网是哪家的?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
如何在阿里云域名上完成建站全流程?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
内网网站制作软件,内网的网站如何发布到外网?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
实例解析angularjs的filter过滤器
如何在Windows 2008云服务器安全搭建网站?
如何用狗爹虚拟主机快速搭建网站?
建站之星微信建站一键生成小程序+多端营销系统
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
重庆市网站制作公司,重庆招聘网站哪个好?
python的本地网站制作,如何创建本地站点?
*请认真填写需求信息,我们会在24小时内与您取得联系。