android学习资料大全.ppt_第1页
android学习资料大全.ppt_第2页
android学习资料大全.ppt_第3页
android学习资料大全.ppt_第4页
android学习资料大全.ppt_第5页
已阅读5页,还剩121页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京传智播客教育 3G应用开发之Android 讲师 黎活明 北京传智播客教育 什么是3G 3G 全称为3rdGeneration 中文含义就是指第三代数字通信 所谓3G 是指将无线通信与国际互联网等多媒体通信结合的新一代移动通信系统 3G只是一种通信技术标准 符合这个标准的技术有WCDMA CDMA2000 TD SCDMA三种无线接口标准 中国联通使用的是WCDMA 世界上大部分3G网络都采用的是该标准 中国电信使用的是CDMA2000 日 韩和北美使用 中国移动使用的是具有自主知识产权的TD SCDMA 只有中国才使用 相对第一代模拟制式手机 1G 和第二代GSM CDMA等数字手机 2G 3G手机能处理图像 音乐 视频等多种媒体形式 提供包括网页浏览 电话会议 电子商务等多种信息服务 3G网络与前两代的主要区别是整合了互联网并且数据传输速度有很大的提升 目前中国正在建设3G网络 大城市的3G网络基本上已经铺设好 像北京铺设好了超过2000个基站 深圳铺设了1000多个基站 但是要全民普及到3G手机尚且需要几年时间 现在 大家使用的手机大多还是2 5G手机 符合2 5G网络的接口标准有CDMA20001X和GPRS 中国联通使用的是CDMA20001X标准 中国移动使用的是GPRS标准 目前 我们可以把2 5G移动通信技术看作是2G迈向3G的衔接性技术 在2 5G网络下出现了如WAP 蓝牙 Bluetoot 等技术 对于2 5G网络 我们应该也要有所了解 因为以后大家到企业中有可能会面对2 5G网络下的应用 如 wap项目 北京传智播客教育 什么是Android Android是Google在2007年11月5日推出的开源手机操作系统 目前Android在中国的发展是非常火的 为了节省研发费用 国内很多的手机厂商和移动运营商纷纷加入到了android阵营 其中包括中国移动 中国联通 中国电信 华为 联想等大企业 在中国不管是知名的手机生产厂商还是山寨手机厂商 都已经开始生产Android操作系统的手机 另外android应用的范围不仅仅在手机 还被应用在汽车 平板电脑 和智能上网设备上 听说国外已经有了安装Android系统 并且能够上网的智能电饭煲 用户在千里之外就可以操作电饭煲进行煮饭 由于大家大多使用的手机都属傻瓜手机 也就是打打电话 发发短信 从今天开始 大家必须改变这个观念了 大家需要把智能手机看作是一台电脑 只要安装上相应软件它就能完成电脑所能完成的一切 北京传智播客教育 智能手机软件平台 智能手机软件平台有 Symbian WindowsMobile RIMBlackBerry Android iPhone Java J2ME 2010年市场份额 Symbian36 6 Android25 5 iPhone16 7windowsMobile2 8 linux2 1 北京传智播客教育 如何安装AndroidSDK和Eclipse插件 所需开发环境 JDK5或以上版本 仅有JRE不够 Eclipse3 4或以上版本下载用于在Eclipse开发android应用的ADT插件在企业开发中 很多程序员使用EclipseIDE作为应用的开发环境 为了使得Android应用的创建 运行和调试更加方便快捷 Android的开发团队专门针对EclipseIDE定制了一个插件 AndroidDevelopmentTools ADT 下载地址 北京传智播客教育 开发第一个Android应用 打开Eclipse 新建项目 点击File New Project 在项目列表中展开Android目录 选择AndroidProject 如下图 北京传智播客教育 开发第一个Android应用 北京传智播客教育 开发第一个Android应用 点击 finish 即可完成项目的创建 创建后的项目已经是一个可运行的Android应用 我们可以通过下面方式运行此应用 点击工具栏上机器人形状的虚拟设备管理器 简称 AVD 如下 北京传智播客教育 开发第一个Android应用 在打开的虚拟设备管理器中创建一个虚拟手机 北京传智播客教育 开发第一个Android应用 在项目上右键点击runas Androidapplication 如下图 北京传智播客教育 Android应用程序架构 src java原代码存放目录gen 自动生成目录gen目录中存放所有由Android开发工具自动生成的文件 目录中最重要的就是R java文件 这个文件由Android开发工具自动产生的 Android开发工具会自动根据你放入res目录的资源 同步更新修改R java文件 正因为R java文件是由开发工具自动生成的 所以我们应避免手工修改R java R java在应用中起到了字典的作用 它包含了各种资源的id 通过R java 应用可以很方便地找到对应资源 res 资源 Resource 目录在这个目录中我们可以存放应用使用到的各种资源 如xml界面文件 图片或数据 具体请看ppt下方备注栏 assets资源目录Android除了提供 res目录存放资源文件外 在 assets目录也可以存放资源文件 而且 assets目录下的资源文件不会在R java自动生成ID 所以读取 assets目录下的文件必须指定文件的路径 如 file android asset xxx 3gpAndroidManifest xml项目清单文件这个文件列出了应用程序所提供的功能 以后你开发好的各种组件需要在该文件中进行配置 如果应用使用到了系统内置的应用 如电话服务 互联网服务 短信服务 GPS服务等等 你还需在该文件中声明使用权限 default properties项目环境信息 一般是不需要修改此文件 北京传智播客教育 电话拔号器 效果图 北京传智播客教育 电话拔号器 因为应用要使用手机的电话服务 所以要在清单文件AndroidManifest xml中添加电话服务权限 略 北京传智播客教育 电话拔号器 界面布局 LinearLayout 线性布局 AbsoluteLayout 绝对布局 RelativeLayout 相对布局 TableLayout 表格布局 FrameLayout 帧布局 北京传智播客教育 Android中的显示单位 px pixels 像素一般HVGA代表320 x480像素 这个用的比较多 dip或dp deviceindependentpixels 设备独立像素这个和设备硬件有关 一般为了支持WVGA HVGA和QVGA推荐使用这个 不依赖像素 sp scaledpixels bestfortextsize 比例像素主要处理字体的大小 可以根据系统的字体自适应 除了上面三个显示单位 下面还有几个不太常用 in inches 英寸mm millimeters 毫米pt points 点 1 72英寸为了适应不同分辨率 不同的像素密度 推荐使用dip 文字使用sp 北京传智播客教育 电话拔号器 Activity publicclassDialerActionextendsActivity OverridepublicvoidonCreate BundlesavedInstanceState super onCreate savedInstanceState setContentView R layout main Buttonbutton Button findViewById R id button button setOnClickListener newView OnClickListener publicvoidonClick Viewv EditTexteditText EditText findViewById R id mobile Intentintent newIntent Intent ACTION CALL Uri parse tel editText getText DialerAction this startActivity intent 北京传智播客教育 电话拔号器 测试步骤 1 在Eclipse中运行此应用2 在Dos窗口中进入androidSDK安装路径的tools目录 输入以下命令再开启一个Android模拟器 emulator dataitcast注 itcast为用户数据存取文件 如果该文件不存在 默认在tools目录创建该文件3 在电话扰号器中输入上图现显的电话号码 北京传智播客教育 尚未注册网络 错误信息的解决办法 打开Android模拟器时 出现无信号 拔打电话或发短信时 提示 尚未注册网络 错误信息的解决方案如下 场景一 你的电脑没有连接上互联网 同时也没有在局域网 解决办法 右键点击网上邻居 选择 属性 在网络连接窗口中右键点击 本地连接 选择 属性 设置TCP IP属性如下 IP地址 192 168 1 100子网掩码 255 255 255 0默认网关 192 168 1 100首选DNS服务器 192 168 1 100场景二 你的电脑没有连接上互联网 但在局域网 解决办法 右键点击网上邻居 选择 属性 在网络连接窗口中右键点击 本地连接 选择 属性 设置TCP IP属性如下 IP地址 设置成你所在局域网的IP 如 192 168 1 100子网掩码 设置成你所在局域网的掩码 如 255 255 255 0默认网关 设置成你所在局域网的网关 一般网关的IP格式为 1 如 192 168 1 1首选DNS服务器 设置成你所在局域网的路由器IP 一般路由器的IP格式为 1 如 192 168 1 1最后一种解决方案是 让你的电脑连接上互联网 北京传智播客教育 短信发送器 效果图 北京传智播客教育 短信发送器 因为应用要使用手机的短信服务 所以要在清单文件AndroidManifest xml中添加短信服务权限 略 北京传智播客教育 短信发送器 界面布局 北京传智播客教育 短信发送器 Activity主要代码 Stringmobile mobileView getText toString Stringcontent contentView getText toString SmsManagersmsManager SmsManager getDefault PendingIntentsentIntent PendingIntent getBroadcast SMSSender this 0 newIntent 0 如果字数超过70 需拆分成多条短信发送Listmsgs smsManager divideMessage content for Stringmsg msgs smsManager sendTextMessage mobile null msg sentIntent null 第四个参数用于告之短信发送状态 最后一个参数用于告之短信接收状态 Toast makeText SMSSender this 短信发送完成 Toast LENGTH LONG show 北京传智播客教育 短信发送器 测试步骤 1 在Eclipse中运行此应用2 在Dos窗口中进入androidSDK安装路径的tools目录 输入以下命令再开启一个Android模拟器 emulator dataitcast注 itcast为用户数据存取文件 如果该文件不存在 默认在tools目录创建该文件3 在短信发送器的手机号中输入上图现显的电话号码注 目前Android系统对中文短信尚未支持 所以发送中文短信会有乱码 这个问题日后会被解决的 北京传智播客教育 发送彩信 可以通过调用系统自带的短信程序发送彩信 Intentintent newIntent Intent ACTION SEND intent putExtra Intent EXTRA STREAM Uri parse file sdcard cong png intent putExtra addressintent putExtra exit on sent true intent putExtra subject it ssubject intent putExtra sms body it scontent intent setType image jpeg 视频 video mpeg 文本 text plainstartActivity intent 北京传智播客教育 对应用进行单元测试 在实际开发中 开发android软件的过程需要不断地进行测试 使用Junit测试框架 是正规Android开发的必用技术 在Junit中可以得到组件 可以模拟发送事件和检测程序处理的正确性 第一步 首先在AndroidManifest xml中加入下面红色代码 上面targetPackage指定的包要和应用的package相同 第二步 编写单元测试代码 选择要测试的方法 右键点击 RunAs AndroidJunitTest importandroid test AndroidTestCase importandroid util Log publicclassXMLTestextendsAndroidTestCase publicvoidtestSomething throwsThrowable Assert assertTrue 1 1 3 北京传智播客教育 数据存储与访问 很多时候我们开发的软件需要对处理后的数据进行存储 以供再次访问 Android为数据存储提供了如下几种方式 文件SharedPreferences 参数 SQLite数据库内容提供者 Contentprovider 网络 北京传智播客教育 使用文件进行数据存储 首先给大家介绍使用文件如何对数据进行存储 Activity提供了openFileOutput 方法可以用于把数据输出到文件中 具体的实现过程与在J2SE环境中保存数据到文件中是一样的 publicclassFileActivityextendsActivity OverridepublicvoidonCreate BundlesavedInstanceState FileOutputStreamoutStream this openFileOutput itcast txt Context MODE PRIVATE outStream write 传智播客 getBytes outStream close openFileOutput 方法的第一参数用于指定文件名称 不能包含路径分隔符 如果文件不存在 Android会自动创建它 创建的文件保存在 data data files目录 如 data data cn itcast action files itcast txt 通过点击Eclipse菜单 Window ShowView Other 在对话窗口中展开android文件夹 选择下面的FileExplorer视图 然后在FileExplorer视图中展开 data data files目录就可以看到该文件 openFileOutput 方法的第二参数用于指定操作模式 有四种模式 分别为 Context MODE PRIVATE 0Context MODE APPEND 32768Context MODE WORLD READABLE 1Context MODE WORLD WRITEABLE 2 北京传智播客教育 使用文件进行数据存储 Context MODE PRIVATE 为默认操作模式 代表该文件是私有数据 只能被应用本身访问 在该模式下 写入的内容会覆盖原文件的内容 如果想把新写入的内容追加到原文件中 可以使用Context MODE APPENDContext MODE APPEND 模式会检查文件是否存在 存在就往文件追加内容 否则就创建新文件 Context MODE WORLD READABLE和Context MODE WORLD WRITEABLE用来控制其他应用是否有权限读写该文件 MODE WORLD READABLE 表示当前文件可以被其他应用读取 MODE WORLD WRITEABLE 表示当前文件可以被其他应用写入 如果希望文件被其他应用读和写 可以传入 openFileOutput itcast txt Context MODE WORLD READABLE Context MODE WORLD WRITEABLE android有一套自己的安全模型 当应用程序 apk 在安装时系统就会分配给他一个userid 当该应用要去访问其他资源比如文件的时候 就需要userid匹配 默认情况下 任何应用创建的文件 sharedpreferences 数据库都应该是私有的 位于 data data files 其他程序无法访问 除非在创建时指定了Context MODE WORLD READABLE或者Context MODE WORLD WRITEABLE 只有这样其他程序才能正确访问 北京传智播客教育 读取文件内容 如果要打开存放在 data data files目录应用私有的文件 可以使用Activity提供openFileInput 方法 FileInputStreaminStream this getContext openFileInput itcast txt Log i FileTest readInStream inStream readInStream 的方法请看本页下面备注 或者直接使用文件的绝对路径 Filefile newFile data data cn itcast action files itcast txt FileInputStreaminStream newFileInputStream file Log i FileTest readInStream inStream 注意 上面文件路径中的 cn itcast action 为应用所在包 当你在编写代码时应替换为你自己应用使用的包 对于私有文件只能被创建该文件的应用访问 如果希望文件能被其他应用读和写 可以在创建文件时 指定Context MODE WORLD READABLE和Context MODE WORLD WRITEABLE权限 Activity还提供了getCacheDir 和getFilesDir 方法 getCacheDir 方法用于获取 data data cache目录getFilesDir 方法用于获取 data data files目录 北京传智播客教育 把文件存放在SDCard 使用Activity的openFileOutput 方法保存文件 文件是存放在手机空间上 一般手机的存储空间不是很大 存放些小文件还行 如果要存放像视频这样的大文件 是不可行的 对于像视频这样的大文件 我们可以把它存放在SDCard SDCard是干什么的 你可以把它看作是移动硬盘或U盘 在模拟器中使用SDCard 你需要先创建一张SDCard卡 当然不是真的SDCard 只是镜像文件 创建SDCard可以在Eclipse创建模拟器时随同创建 也可以使用DOS命令进行创建 如下 在Dos窗口中进入androidSDK安装路径的tools目录 输入以下命令创建一张容量为2G的SDCard 文件后缀可以随便取 建议使用 img mksdcard2048MD AndroidTool sdcard img在程序中访问SDCard 你需要申请访问SDCard的权限 在AndroidManifest xml中加入访问SDCard的权限如下 北京传智播客教育 把文件存放在SDCard 要往SDCard存放文件 程序必须先判断手机是否装有SDCard 并且可以进行读写 注意 访问SDCard必须在AndroidManifest xml中加入访问SDCard的权限if Environment getExternalStorageState equals Environment MEDIA MOUNTED FilesdCardDir Environment getExternalStorageDirectory 获取SDCard目录FilesaveFile newFile sdCardDir itcast txt FileOutputStreamoutStream newFileOutputStream saveFile outStream write 传智播客 getBytes outStream close Environment getExternalStorageState 方法用于获取SDCard的状态 如果手机装有SDCard 并且可以进行读写 那么方法返回的状态等于Environment MEDIA MOUNTED Environment getExternalStorageDirectory 方法用于获取SDCard的目录 当然要获取SDCard的目录 你也可以这样写 FilesdCardDir newFile mnt sdcard 获取SDCard目录FilesaveFile newFile sdCardDir itcast txt 上面两句代码可以合成一句 FilesaveFile newFile mnt sdcard itcast txt FileOutputStreamoutStream newFileOutputStream saveFile outStream write 传智播客test getBytes outStream close 北京传智播客教育 使用SAX或者DOM或者pull解析XML文件 在Android平台上可以使用SimpleAPIforXML SAX DocumentObjectModel DOM 和Android附带的pull解析器解析XML文件 下面是本例子要解析的XML文件 文件名称 itcast xmlliming30zhangxiaoxiao25例子定义了一个javabean用于存放上面解析出来的xml内容 这个javabean为Person 代码请见本页下面备注 北京传智播客教育 使用SAX读取XML文件 SAX是一个解析速度快并且占用内存少的xml解析器 非常适合用于Android等移动设备 SAX解析XML文件采用的是事件驱动 也就是说 它并不需要解析完整个文档 在按内容顺序解析文档的过程中 SAX会判断当前读到的字符是否合法XML语法中的某部分 如果符合就会触发事件 所谓事件 其实就是一些回调 callback 方法 这些方法 事件 定义在ContentHandler接口 下面是一些ContentHandler接口常用的方法 startDocument 当遇到文档的开头的时候 调用这个方法 可以在其中做一些预处理的工作 endDocument 和上面的方法相对应 当文档结束的时候 调用这个方法 可以在其中做一些善后的工作 startElement StringnamespaceURI StringlocalName StringqName Attributesatts 当读到一个开始标签的时候 会触发这个方法 namespaceURI就是命名空间 localName是不带命名空间前缀的标签名 qName是带命名空间前缀的标签名 通过atts可以得到所有的属性名和相应的值 要注意的是SAX中一个重要的特点就是它的流式处理 当遇到一个标签的时候 它并不会纪录下以前所碰到的标签 也就是说 在startElement 方法中 所有你所知道的信息 就是标签的名字和属性 至于标签的嵌套结构 上层标签的名字 是否有子元属等等其它与结构相关的信息 都是不得而知的 都需要你的程序来完成 这使得SAX在编程处理上没有DOM来得那么方便 endElement Stringuri StringlocalName Stringname 这个方法和上面的方法相对应 在遇到结束标签的时候 调用这个方法 characters char ch intstart intlength 这个方法用来处理在XML文件中读到的内容 第一个参数为文件的字符串内容 后面两个参数是读到的字符串在这个数组中的起始位置和长度 使用newString ch start length 就可以获取内容 北京传智播客教育 使用SAX读取XML文件 只要为SAX提供实现ContentHandler接口的类 那么该类就可以得到通知事件 实际上就是SAX调用了该类中的回调方法 因为ContentHandler是一个接口 在使用的时候可能会有些不方便 因此 SAX还为其制定了一个Helper类 DefaultHandler 它实现了ContentHandler接口 但是其所有的方法体都为空 在实现的时候 你只需要继承这个类 然后重写相应的方法即可 使用SAX解析itcast xml的代码如下 publicstaticListreadXML InputStreaminStream try SAXParserFactoryspf SAXParserFactory newInstance SAXParsersaxParser spf newSAXParser 创建解析器 设置解析器的相关特性 http xml org sax features namespaces true表示开启命名空间特性 saxParser setProperty http xml org sax features namespaces true XMLContentHandlerhandler newXMLContentHandler saxParser parse inStream handler inStream close returnhandler getPersons catch Exceptione e printStackTrace returnnull SAX支持已内置到JDK1 5中 你无需添加任何的jar文件 关于XMLContentHandler的代码实现请看本页下面备注 北京传智播客教育 使用DOM读取XML文件 除了使用SAX可以解析XML文件 大家也可以使用熟悉的DOM来解析XML文件 DOM解析XML文件时 会将XML文件的所有内容以文档树方式存放在内存中 然后允许您使用DOMAPI遍历XML树 检索所需的数据 使用DOM操作XML的代码看起来是比较直观的 并且在编码方面比基于SAX的实现更加简单 但是 因为DOM需要将XML文件的所有内容以文档树方式存放在内存中 所以内存的消耗比较大 特别对于运行Android的移动设备来说 因为设备的资源比较宝贵 所以建议还是采用SAX来解析XML文件 当然 如果XML文件的内容比较小采用DOM也是可行的 代码请看本页下方备注 北京传智播客教育 使用Pull解析器读取XML文件 除了可以使用SAX或DOM解析XML文件之外 大家也可以使用Android内置的Pull解析器解析XML文件 Pull解析器是一个开源的java项目 既可以用于android 也可以用于JavaEE 如果用在javaEE需要把其jar文件放入类路径中 因为Android已经集成进了Pull解析器 所以无需添加任何jar文件 android系统本身使用到的各种xml文件 其内部也是采用Pull解析器进行解析的 Pull解析器的运行方式与SAX解析器相似 它提供了类似的事件 如 开始元素和结束元素事件 使用parser next 可以进入下一个元素并触发相应事件 跟SAX不同的是 Pull解析器产生的事件是一个数字 而非方法 因此可以使用一个switch对感兴趣的事件进行处理 当元素开始解析时 调用parser nextText 方法可以获取下一个Text类型节点的值 使用Pull解析器读取itcast xml的代码在本页下方备注Pull解析器的源码及文档下载网址 http xmlpull org xmlpull website impls shtml 北京传智播客教育 使用Pull解析器生成XML文件 有些时候 我们需要生成一个XML文件 生成XML文件的方法有很多 如 可以只使用一个StringBuilder组拼XML内容 然后把内容写入到文件中 或者使用DOMAPI生成XML文件 或者也可以使用pull解析器生成XML文件 这里推荐大家使用Pull解析器 使用Pull解析器生成一个与itcast xml文件内容相同的myitcast xml文件 代码在本页下方备注使用代码如下 生成XML文件 FilexmlFile newFile myitcast xml FileOutputStreamoutStream newFileOutputStream xmlFile OutputStreamWriteroutStreamWriter newOutputStreamWriter outStream UTF 8 BufferedWriterwriter newBufferedWriter outStreamWriter writeXML persons writer writer flush writer close 如果只想得到生成的xml字符串内容 可以使用StringWriter StringWriterwriter newStringWriter writeXML persons writer Stringcontent writer toString 北京传智播客教育 使用SharedPreferences进行数据存储 很多时候我们开发的软件需要向用户提供软件参数设置功能 例如我们常用的QQ 用户可以设置是否允许陌生人添加自己为好友 对于软件配置参数的保存 如果是window软件通常我们会采用ini文件进行保存 如果是j2se应用 我们会采用properties属性文件或者xml进行保存 如果是Android应用 我们最适合采用什么方式保存软件配置参数呢 Android平台给我们提供了一个SharedPreferences类 它是一个轻量级的存储类 特别适合用于保存软件配置参数 使用SharedPreferences保存数据 其背后是用xml文件存放数据 文件存放在 data data shared prefs目录下 SharedPreferencessharedPreferences getSharedPreferences itcast Context MODE PRIVATE Editoreditor sharedPreferences edit 获取编辑器editor putString name 传智播客 editor putInt age 4 mit 提交修改生成的itcast xml文件内容如下 传智播客因为SharedPreferences背后是使用xml文件保存数据 getSharedPreferences name mode 方法的第一个参数用于指定该文件的名称 名称不用带后缀 后缀会由Android自动加上 方法的第二个参数指定文件的操作模式 共有四种操作模式 这四种模式前面介绍使用文件方式保存数据时已经讲解过 如果希望SharedPreferences背后使用的xml文件能被其他应用读和写 可以指定Context MODE WORLD READABLE和Context MODE WORLD WRITEABLE权限 另外Activity还提供了另一个getPreferences mode 方法操作SharedPreferences 这个方法默认使用当前类不带包名的类名作为文件的名称 北京传智播客教育 访问SharedPreferences中的数据 访问SharedPreferences中的数据代码如下 SharedPreferencessharedPreferences getSharedPreferences itcast Context MODE PRIVATE getString 第二个参数为缺省值 如果preference中不存在该key 将返回缺省值Stringname sharedPreferences getString name intage sharedPreferences getInt age 1 如果访问其他应用中的Preference 前提条件是 该preference创建时指定了Context MODE WORLD READABLE或者Context MODE WORLD WRITEABLE权限 如 有个为cn itcast action的应用使用下面语句创建了preference getSharedPreferences itcast Context MODE WORLD READABLE 其他应用要访问上面应用的preference 首先需要创建上面应用的Context 然后通过Context访问preference 访问preference时会在应用所在包下的shared prefs目录找到preference ContextotherAppsContext createPackageContext cn itcast action Context CONTEXT IGNORE SECURITY SharedPreferencessharedPreferences otherAppsContext getSharedPreferences itcast Context MODE WORLD READABLE Stringname sharedPreferences getString name intage sharedPreferences getInt age 0 如果不通过创建Context访问其他应用的preference 也可以以读取xml文件方式直接访问其他应用preference对应的xml文件 如 FilexmlFile newFile data data shared prefs itcast xml 应替换成应用的包名 北京传智播客教育 使用嵌入式关系型SQLite数据库存储数据 在Android平台上 集成了一个嵌入式关系型数据库 SQLite SQLite3支持NULL INTEGER REAL 浮点数字 TEXT 字符串文本 和BLOB 二进制对象 数据类型 虽然它支持的类型只有五种 但实际上sqlite3也接受varchar n char n decimal p s 等数据类型 只不过在运算或保存时会转成对应的五种数据类型 SQLite最大的特点是你可以把各种类型的数据保存到任何字段中 而不用关心字段声明的数据类型是什么 例如 可以在Integer类型的字段中存放字符串 或者在布尔型字段中存放浮点数 或者在字符型字段中存放日期型值 但有一种情况例外 定义为INTEGERPRIMARYKEY的字段只能存储64位整数 当向这种字段保存除整数以外的数据时 将会产生错误 另外 在编写CREATETABLE语句时 你可以省略跟在字段名称后面的数据类型信息 如下面语句你可以省略name字段的类型信息 CREATETABLEperson personidintegerprimarykeyautoincrement namevarchar 20 SQLite可以解析大部分标准SQL语句 如 查询语句 select from表名where条件子句groupby分组字句having orderby排序子句如 select frompersonselect frompersonorderbyiddescselectnamefrompersongroupbynamehavingcount 1分页SQL与mysql类似 下面SQL语句获取5条记录 跳过前面3条记录select fromAccountlimit5offset3或者select fromAccountlimit3 5插入语句 insertinto表名 字段列表 values 值列表 如 insertintoperson name age values 传智 3 更新语句 update表名set字段名 值where条件子句 如 updatepersonsetname 传智 whereid 10删除语句 deletefrom表名where条件子句 如 deletefrompersonwhereid 10获取添加记录后自增长的ID值 SELECTlast insert rowid 北京传智播客教育 使用SQLiteOpenHelper对数据库进行版本管理 我们在编写数据库应用软件时 需要考虑这样的问题 因为我们开发的软件可能会安装在很多用户的手机上 如果应用使用到了SQLite数据库 我们必须在用户初次使用软件时创建出应用使用到的数据库表结构及添加一些初始化记录 另外在软件升级的时候 也需要对数据表结构进行更新 那么 我们如何才能实现在用户初次使用或升级软件时自动在用户的手机上创建出应用需要的数据库表呢 总不能让我们在每个需要安装此软件的手机上通过手工方式创建数据库表吧 因为这种需求是每个数据库应用都要面临的 所以在Android系统 为我们提供了一个名为SQLiteOpenHelper的抽象类 必须继承它才能使用 它是通过对数据库版本进行管理来实现前面提出的需求 为了实现对数据库版本进行管理 SQLiteOpenHelper类提供了两个重要的方法 分别是onCreate SQLiteDatabasedb 和onUpgrade SQLiteDatabasedb intoldVersion intnewVersion 前者用于初次使用软件时生成数据库表 后者用于升级软件时更新数据库表结构 当调用SQLiteOpenHelper的getWritableDatabase 或者getReadableDatabase 方法获取用于操作数据库的SQLiteDatabase实例的时候 如果数据库不存在 Android系统会自动生成一个数据库 接着调用onCreate 方法 onCreate 方法在初次生成数据库时才会被调用 在onCreate 方法里可以生成数据库表结构及添加一些应用使用到的初始化数据 onUpgrade 方法在数据库的版本发生变化时会被调用 一般在软件升级时才需改变版本号 而数据库的版本是由程序员控制的 假设数据库现在的版本是1 由于业务的变更 修改了数据库表结构 这时候就需要升级软件 升级软件时希望更新用户手机里的数据库表结构 为了实现这一目的 可以把原来的数据库版本设置为2 有同学问设置为3行不行 当然可以 如果你愿意 设置为100也行 并且在onUpgrade 方法里面实现表结构的更新 当软件的版本升级次数比较多 这时在onUpgrade 方法里面可以根据原版号和目标版本号进行判断 然后作出相应的表结构及数据更新 getWritableDatabase 和getReadableDatabase 方法都可以获取一个用于操作数据库的SQLiteDatabase实例 但getWritableDatabase 方法以读写方式打开数据库 一旦数据库的磁盘空间满了 数据库就只能读而不能写 倘若使用getWritableDatabase 打开数据库就会出错 getReadableDatabase 方法先以读写方式打开数据库 如果数据库的磁盘空间满了 就会打开失败 当打开失败后会继续尝试以只读方式打开数据库 北京传智播客教育 使用SQLiteOpenHelper对数据库进行版本管理 publicclassDatabaseHelperextendsSQLiteOpenHelper 类没有实例化 是不能用作父类构造器的参数 必须声明为静态privatestaticfinalStringname itcast 数据库名称privatestaticfinalintversion 1 数据库版本publicDatabaseHelper Contextcontext 第三个参数CursorFactory指定在执行查询时获得一个游标实例的工厂类 设置为null 代表使用系统默认的工厂类super context name null version OverridepublicvoidonCreate SQLiteDatabasedb db execSQL CREATETABLEIFNOTEXISTSperson personidintegerprimarykeyautoincrement namevarchar 20 ageINTEGER OverridepublicvoidonUpgrade SQLiteDatabasedb intoldVersion intnewVersion db execSQL ALTERTABLEpersonADDphoneVARCHAR 12 NULL 往表中增加一列 DROPTABLEIFEXISTSperson删除表 在实际项目开发中 当数据库表结构发生更新时 应该避免用户存放于数据库中的数据丢失 北京传智播客教育 使用SQLiteDatabase操作SQLite数据库 Android提供了一个名为SQLiteDatabase的类 该类封装了一些操作数据库的API 使用该类可以完成对数据进行添加 Create 查询 Retrieve 更新 Update 和删除 Delete 操作 这些操作简称为CRUD 对SQLiteDatabase的学习 我们应该重点掌握execSQL 和rawQuery 方法 execSQL 方法可以执行insert delete update和CREATETABLE之类有更改行为的SQL语句 rawQuery 方法用于执行select语句 execSQL 方法的使用例子 SQLiteDatabasedb db execSQL insertintoperson name age values 传智播客 4 db close 执行上面SQL语句会往person表中添加进一条记录 在实际应用中 语句中的 传智播客 这些参数值会由用户输入界面提供 如果把用户输入的内容原样组拼到上面的insert语句 当用户输入的内容含有单引号时 组拼出来的SQL语句就会存在语法错误 要解决这个问题需要对单引号进行转义 也就是把单引号转换成两个单引号 有些时候用户往往还会输入像 execSQL Stringsql Object bindArgs 方法的第一个参数为SQL语句 第二个参数为SQL语句中占位符参数的值 参数值在数组中的顺序要和占位符的位置对应 北京传智播客教育 使用SQLiteDatabase操作SQLite数据库 SQLiteDatabase的rawQuery 用于执行select语句 使用例子如下 SQLiteDatabasedb Cursorcursor db rawQuery select fromperson null while cursor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论