位置: 编程技术 - 正文

Android四大组件之一:contentprovider & 三大存储方式之一:SQLite数据库存储 应用实例(android四大组件面试)

编辑:rootadmin

推荐整理分享Android四大组件之一:contentprovider & 三大存储方式之一:SQLite数据库存储 应用实例(android四大组件面试),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:Android四大组件,android四大组件详解,android四大组件的作用,android四大组件生命周期,android四大组件详解,android四大组件及其功能,android四大组件五大布局,android四大组件和特点,内容如对您有帮助,希望把文章链接给更多的朋友!

android中的数据持久化技术(数据存储技术)存在一定的制约,包括文件存储、SharedPreferences存储以及数据库(SQLite)存储,该三类存储方式只能在当前应用程序中访问。如果要实现跨程序数据共享的功能,需要使用android四大组件之一的内容提供器contentprovider。以下是通过内容提供器来实现一个应用访问另外一个应用的SQLite数据库的功能(主要实现添加数据和查询数据的功能),代码如下:

一. 创建内容提供器MycontentProvider——给程序的数据提供外部访问接口

包名:com.example.mycontentprovider

1.继承SQLiteOpenHelper,重写oncreat()和onUpgrade()对数据库进行创建和升级

package com.example.mycontentprovider;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class MyDatabaseHelper extends SQLiteOpenHelper {public static final String CREATE_BOOK = "create table book("&#;"id integer primary key autoincrement, "&#;"name text, "&#;"price real) "; //创建一个表,id为主键,自动生成,name文本类,price 实数类public MyDatabaseHelper(Context context, String name,CursorFactory factory, int version) {super(context, name, factory, version);// TODO Auto-generated constructor stub}@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stubdb.execSQL(CREATE_BOOK); //执行SQL语句,创建book表}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stub}

2. 自定义一个继承与ContentProvider的MyDatabaseProvider类,重现insert(),query()等方法,提供数据添加和查询等接口

package com.example.mycontentprovider;import android.content.ContentProvider;import android.content.ContentValues;import android.content.UriMatcher;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.net.Uri;public class MyDatabaseProvider extends ContentProvider {//定义BOOK_DIR和BOOK_ITEM两个自定义代码,前者表示访问表中所有数据,后者表示访问表中某条数据public static final int BOOK_DIR = 0;public static final int BOOK_ITEM = 1;//定义权限 AUTHORITYpublic static final String AUTHORITY = "com.example.mycontentprovider.provider";//定义对uri进行匹配的类UriMatcherprivate static UriMatcher uriMatcher;private MyDatabaseHelper dbHelper;//通过addURI方法添加权限和路径,以及自定义代码,当调用urimatcher的match()方法时,传入一个uri对象后返回此处定义的自定义代码,据此来判断是访问哪个表还是哪条数据static {uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);uriMatcher.addURI(AUTHORITY, "book", BOOK_DIR);uriMatcher.addURI(AUTHORITY, "book/#", BOOK_ITEM);}@Overridepublic int delete(Uri arg0, String arg1, String[] arg2) {// TODO Auto-generated method stubreturn 0;}@Overridepublic String getType(Uri arg0) {// TODO Auto-generated method stubreturn null;}@Overridepublic Uri insert(Uri arg0, ContentValues arg1) {// TODO Auto-generated method stub//获取对数据库的可操作对象dbSQLiteDatabase db = dbHelper.getWritableDatabase();Uri uriReturn = null;switch (uriMatcher.match(arg0)) {case BOOK_DIR:case BOOK_ITEM:long newBookId = db.insert("book", null, arg1);//插入arg1数据到book表中 uriReturn = Uri.parse(" uriReturn;}//创建MyDatabaseHelper类对象,定义数据库名“BookStore.db”@Overridepublic boolean onCreate() {// TODO Auto-generated method stubdbHelper = new MyDatabaseHelper(getContext(), "BookStore.db", null, 1);return true;}@Overridepublic Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3,String arg4) {// TODO Auto-generated method stubSQLiteDatabase db = dbHelper.getReadableDatabase();Cursor cursor = null;switch (uriMatcher.match(arg0)) {case BOOK_DIR:cursor = db.query("book", null, null, null, null, null, null);break;case BOOK_ITEM:String bookId = arg0.getPathSegments().get(1);cursor = db.query("book", null, "id = ?", new String[]{bookId}, null, null, null);break;default:break;}return cursor;}@Overridepublic int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {// TODO Auto-generated method stubreturn 0;}}

3.在androidmanifest里注册之前定义的MyDatabaseProvider,四大组件都必须在manifest里进行注册才能生效

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android=" package="com.example.mycontentprovider" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <provider android:name="com.example.mycontentprovider.MyDatabaseProvider" android:authorities="com.example.mycontentprovider.provider" android:exported="true" > </provider> </application></manifest>

二. 创建MycontentResolver应用,对以上应用的数据进行添加和查询操作:

package com.example.mycontentresolver;import android.app.Activity;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.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {Button add_Button;Button query_Button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); add_Button = (Button)findViewById(R.id.addDataButton); query_Button = (Button)findViewById(R.id.queryDataButton); add_Button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubUri uri = Uri.parse(" values = new ContentValues();values.put("name", "张三");values.put("price", .9);Uri myUri = getContentResolver().insert(uri, values);Log.d("myUri",""&#; myUri);//打印log日志,判断是否成功插入,若成功插入,会得到插入的地址myUri}}); query_Button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubUri uri = Uri.parse(" cursor = getContentResolver().query(uri, null, null, null, null);if(cursor != null){while (cursor.moveToNext()) {String name = cursor.getString(cursor.getColumnIndex("name"));Double price = cursor.getDouble(cursor.getColumnIndex("price"));Log.d("name", name);Log.d("price", ""&#;price); //打印log日志,判断是否成功查询获取到表中的name和price}cursor.close();}}}); }}

Android四大组件之一:contentprovider  &  三大存储方式之一:SQLite数据库存储 应用实例(android四大组件面试)

下面就来运行下代码:

先运行MycontentProvider,再运行MycontentResolver

在MycontentResolver界面中点击Add_Data

查看log,得到添加的数据的uri,之前已经添加过条了,显示了第条,说明已经添加成功:

点击Query_Data

查看log,查询得到表中所有数据,共条,显示查询成功:

开发日记(3)转发:比较靠谱的图片压缩 第一:我们先看下质量压缩方法:Java代码privateBitmapcompressImage(Bitmapimage){ByteArrayOutputStreambaos=newByteArrayOutputStream();image.compress(Bitmap.CompressFormat.JPEG,,baos);

[Xutils]安卓框架的学习之路 开发用别人框架蛋疼又木有,而且还是初级程序员这种,关于Xutils已经无力吐槽了。网上一搜基本上全是复制的模版统一一样,心痛有木有!@!!!!

欢迎使用CSDN-markdown编辑器 原文出处:

标签: android四大组件面试

本文链接地址:https://www.jiuchutong.com/biancheng/382285.html 转载请保留说明!

上一篇:Android深入浅出系列之实例应用—如何在一个Activity里调用另外一个Activity?(深入浅出css)

下一篇:开发日记(3)转发:比较靠谱的图片压缩(开发日记3雷火剑)

  • 预收货款需要缴纳消费税吗?缴纳消费税的时间应该是?
  • 税金及附加需要计提吗
  • 利息收入属于主体收入吗
  • 民办非企业业务主管单位职责
  • 查增应纳税所得额怎么算
  • 资金账簿印花税减半征收是从什么时候开始的
  • 销售亏损原因分析范文
  • 未开票收入改为开票收入做账
  • 预付款对应的会计科目
  • 酒店购入食材,怎么做会计分录
  • 增值税电子发票怎么作废
  • 专票已经抵扣购买方如何处理
  • 企业所得税固定资产一次性扣除
  • 红字发票需要盖章子吗
  • 继承或赠与所得的房产
  • 简并税率政策是什么?简并税率政策要点如何解读?
  • 房产税要来了!租金也要交,最高达到12%
  • 消费金融服务要交税吗
  • 资产负债表和业务活动表勾稽关系不对怎么查
  • 增值税发票有哪些类型
  • 税控盘第一次使用
  • 电子承兑重复背书两次有影响吗
  • 运输费未取得运输专用发票怎么抵扣?
  • 增值税逾期申报流程
  • 房地产税开征的利弊分析
  • 小规模增值税免税额
  • 贴现利息计算器
  • 上年计提的费用往来,能冲回吗
  • 什么是应收
  • 应用程序无法正常启动(0xc0000142)
  • 如何停止win11
  • 此电脑当前不满足运行win11是怎么回事
  • 设备维修费增值税
  • 小规模纳税人增值税专用发票税率
  • 进项发票没认证可以开红字申请单吗
  • 中秋福利发放现金怎么做表
  • PHP:preg_replace_callback()的用法_PCRE正则函数
  • ghoststartservice.exe是什么进程 有什么作用 ghoststartservice进程查询
  • 资产负债表项目填列的依据是
  • 劳务公司成本票不够怎么办
  • 收到退税款怎么做账
  • 出口抵减内销产品应纳税额怎么结转
  • 人民日报公共事件的报道问题
  • 小规模纳税人开农产品免税发票
  • 劳务公司社保手续办理
  • 利息收入所得税汇算调整
  • 什么情况需要预缴
  • 财政借钱给预算单位的会计处理
  • 所得税费用该怎么算
  • 属于原始凭证的有( )
  • 个体户核定征收超过了怎么办
  • 房产互换如何交税费
  • 车辆购置税的计税价格为不含增值税的全部价款
  • 暂估和冲暂估分录
  • 企业内部罚没收入违法吗
  • 预付账款转营业外支出
  • 开具旧税号也能认证成功
  • 什么叫建账
  • 更新profile
  • 注册表及其作用
  • linux怎么用u盘传输文件
  • ati2plab.exe是什么进程 ati2plab进程安全吗
  • Win10 Mobile RS2预览版14905更新内容大全:全新精致铃声
  • win7系统搜索不到自己家wi-fi
  • win7系统垃圾手动清理
  • 新买的笔记本电脑需要做什么
  • windows识别码
  • Bullet(cocos2dx)学习制作桌球游戏之前期准备
  • javascript的常用数据类型
  • linux反转
  • 跨浏览器跨终端的前端开发
  • android基础入门
  • linux中gzip的用法
  • 安卓 html
  • shell脚本中调用shell脚本
  • python怎么将列表转换成数字
  • 广西发票查询平台
  • 个人涉税信息采集 工行
  • 建筑一般纳税人开3%
  • 浙江省有多少家农业银行
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设