Android 开发技术培训_第1页
Android 开发技术培训_第2页
Android 开发技术培训_第3页
Android 开发技术培训_第4页
Android 开发技术培训_第5页
已阅读5页,还剩175页未读 继续免费阅读

下载本文档

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

文档简介

1、android 开发技术培训 沈大海 android android 的历史的历史 20032004200520062007200820092010 2 android and oha (open handset alliance)android and oha (open handset alliance) google与2007年11月5日宣布组建的一个全球性的联盟组织。 联盟成员将支持盟主google 发布的android 手机操作系统或者应用软件, 共同开发名为android 的开放源代码的移动系统。共同对抗 symbian, windows mobile, iphone等系统。 3

2、android oha android oha 生态系统生态系统 4 android android 市场份额市场份额 5 android kernel version android based on generic linux 2.6 kernel android 1.0 based on linux2.6.25 android 1.5(cupcake) based on linux2.6.27 android 1.6(donut) based on linux2.6.29 android 2.0/2.1(clair) based on linux2.6.29 android 2.2(fr

3、oyo) based on linux 2.6.32 android 2.3(gingerbread) based on linux 2.6.35 android 3.0(honeycomb) based on linux 2.6.36 android special drivers: ashmem logger binder android power management low memory killer and android pmem android release history 2008 q2q3q4q1 2009 q2q3q4q1 2010 q2q3q4q1 2011 q2q3

4、q4q1 android 1.0 (sept 2008) android 1.1 (feb 2009) android 1.5 cupcake (april 2009) android 1.6 donut (sept 2009) android 2.0/2.1 eclair (oct 2009) android 2.2 froyo (may 2010) android 2.3 gingerbread (dec 2010) android 3.0 honeycomb (feb 2011) android 3.x ice cream sandwich (oct/nov 2011?) release

5、 date not yet announced android release cycles range from 1 to 9 months. android framework architectureandroid framework architecture 9 android体系结构 应用程序应用程序(applications):依据user的期望而将af的组件及 libaraies组件组合而成的高阶服务。 应用框架应用框架(application framework, 简称简称af):这是结合 applications与libraries的幕后主架构,让libraries组件能不断

6、地为 applications所重复使用(reuse)。 丰富而又可扩展的视图(丰富而又可扩展的视图(views) 内容提供器(内容提供器(content providers) 资源管理器(资源管理器(resource manager) 通知管理器通知管理器 (notification manager) 活动管理器(活动管理器( activity manager) libraries:android里已经提供的c/c+库存组件(或称模块)。例如, sqlite数据库系统、opengl 3d绘图系统等。 android runtime:java语言层级的virtual machine。 linu

7、x核心核心:android依赖linux 2.6来提供核心的服务,例如内存管 理、进程(process)管理、执行绪(thread)管理等。 10 androidandroid层次层次-kernel-kernel android基于linux 2.6提供核心系统服务,例如:安全、内存管 理、进程管理、网络堆栈、驱动模型。linux kernel也作为硬件 和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一 的服务。 使用binder作为进程间通讯机制,取代传统进程间通讯机制 11 android hardware abstraction layer android hardware abs

8、traction layer 用户空间的c/c+库 遵循apache协议 定义android需要linux driver实现的接口 将android彻底和硬件抽象出来 12 androidandroid层次结构层次结构-android-android runtime runtime android包含一个核心库的集合,提供大部分在java编程语言核心类库中可用 的功能。 dalvik虚拟机则是基于寄存器的,而非大多数 虚拟机所采用的基于栈的实现 dalvik虚拟机依赖于linux 内核提供基本功能, 如线程和底层内存管理。 13 android包含一个c/c+库的集合,供android系统的各

9、个组件使用。这些功 能通过android的应用程序框架(application framework)暴露给开发者。下 面列出一些核心库: 系统系统c库库 多媒体库:多媒体库:opencore 界面管理界面管理 libwebcore sgl 3d库库 freetype sqlite android层次结构层次结构-libraries 14 androidandroid层次结构层次结构applicationapplication framework framework 通过提供开放的开发平台,android使开发者能够编制极其丰富和新颖的应用程序。 开发者可以自由地利用设备硬件优势、访问位置信息、

10、运行后台服务、设置闹钟、向 状态栏添加通知等等,很多很多。 开发者可以完全使用核心应用程序所使用的框架apis。应用程序的体系结构旨在简化 组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能 (需要服从框架执行的安全限制)。这一机制允许用户替换组件。 所有的应用程序其 实是一组服务和系统,包括: view activitymanager contentprovider notificationmanager 15 androidandroid层次结构层次结构applicationsapplications android魅力的终极体现: 对用户:良好的用户体验,强大的用

11、户亲和力 对开发者:快速而灵活的开发平台,让开发者的灵感能快速转化为产品 16 android processes android applications android apk build and packaging android application unpackaging and run 三种开发形式 sdk开发 windows linux mac ndk开发 windows linux 源码开发 (完全源代码,linux中开发) linux操作系统知识 linux内核知识(c语言) linux驱动程序知识(c语言) android底层库(c语言、c+) dalvik虚拟机(c+、

12、java) android gui系统(c+、java) 音频、视频和多媒体(c语言、c+、java) 电话部分的(c语言、c+、java) 连接部分(c语言、c+、java) 传感器部分(c语言、c+、java) android源码开发知识结构: android应用开发知识结构: java语言知识 应用程序架构 gui设计基础知识 各种视图的使用 2d/3d图形api 应用程序的设计思想 androidndk开发知识结构: java语言知识 应用程序架构 jni技术 linux下c编程 android debug tools adb (android debug bridge) dmtrac

13、edump emulator logcat mksdcard monkey sqlite3 eclips gdb /gdbserver 搭建开发环境搭建开发环境eclipseeclipse/adt /adt 下载并安装eclipse:/downloads/ 下载sdk安装包: http:/ 安装adt: 1 启动eclipse-help-install new softwares 2 在”work with”中输入一个任意名字 3 将https:/dl- 添加到网址栏,点击”add”按钮 4 在”work with”的下拉列表中选定刚刚添加的item,

14、在详细信息框中会有选择 列表,推荐全部安装,将开始在线安装过程 31 搭建开发环境搭建开发环境eclipseeclipse/adt /adt 32 搭建开发环境安装搭建开发环境安装sdk sdk 点击window-android sdk and avd manager-available packages, 安装需要的sdk创建一个新的avd 1 通过window-android sdk and avd manager-virtual devices-new 2 通过命令行创建: 开始-运行-cmd-android create avd n avd-name t 6(创建2.0的) 默认创建的

15、路径是c:documents and settingsuser-name.androidavd 33 生成一个新的工程生成一个新的工程 用eclipse创建一个新的android应用: file-new-android project 在弹出的提示对话框中所有填写所有项目: 项目名称 所使用sdk版本 应用程序名称 包名 34 35 运行第一个运行第一个helloandroidhelloandroid 36 从从helloandroidhelloandroid分析分析androidandroid应用的要素应用的要素 androidmanifest.xml res-所有的资源 drawable-

16、图片文件 layout-布局文件 values-字符串以及属性定义文件 src-代码目录 37 目录的组织 anim/ drawable/ layout/ values/ xml/ raw/ 1)anim目录录下存放着描述animation类型的xml文件。 2) drawable目录该目录下存放着.png,.jpg等图片文件。 3) layout目录下存放着屏幕ui的layout文件,格式为xml。 4)values目录下可以存放多种资源类型的xml文件,例如定义 了数组的array.xml,定义了颜色的colors.xml,定义了 dimension的dimnes.xml,定义了字符串的s

17、trings.xml,定义 了style的styles.xml。 5)xml目录存放了用户自定义的xml文件。 6) raw目录可存放了用户的原始数据文件,如声音文件等, 这些文件在编译应用程序过程中不被编译,直接加到apk文 件中。 38 aapt打包示意图 39 限定符的类型和有效的值 限定符有效值 语言语言码,遵循iso 639-1标准,小写,如en, zh. 地区遵循iso 3166-1-alpha-2标准,大写,前面加小写的 “r”,例如:rus,rcn 屏幕朝向port, land, square 屏幕像素密度92dpi, 108dpi等 触摸屏类型notouch, stylus,

18、 finger 键盘是否可用keysexposed, keyshidden 首选的输入法nokeys, qwerty, 12key 首选非触摸导航方法nonav, dpad, trackball, wheel 屏幕尺寸320 x240, 640 x480等,大尺寸必须在前 40 资源管理框架 41 androidandroid应用的要素应用的要素androidmanifestandroidmanifest androidmanifext的作用:描述了程序包的全局变量, 包括暴露的应用组件(activities, services等等) 和为每个组件的实现类, 什么样的数据可以操作, 以及在什么

19、地方运行 42 androidmanifestandroidmanifest的主要元素的主要元素 几乎所有的androidmanifest.xml(以及许多其他android的xml的文件) 在第一个元素中包含了命名空间的声明xmlns:android=“ http:/ 属性能在文件中使用,提供了大部分元素中的数据。 包名(package):指定本应用内java主程序包的包名。当没有指定apk的文件名 时,编译后产生程序包将以此命名。本包名应当在android系统运行时唯一。 application:application是android应用内最高级别(top level)的模块,每个应用 内

20、最多只能有一个application,如果应用没有指定该模块,一个默认的 application将被启用。application将在应用启动时最先被加载,并存活在应用 的整个运行时生命周期。因此一些初始化的工作适合在本模块完成. application元素有许多属性,其中:“persistent”表示本应用是否为常驻内存, “enable”表示本应用当前是否应当被加载。 43 android-activity 1.创建activity xxxactivity extends activity. 2.配置androidmanifest.xml文件 application. launchmode:

21、 standard:每次启动新的活动窗口(new操作) singletop:如果在栈顶是目标活动,则直接打开.否则开启新的活动窗口(new). singletask:同一任务内不再实例化,不同任务需要实例化. singleinstance:不论是否是同一任务,只要打开就共享. androidmanifestandroidmanifest的主要元素的主要元素 activity:activity是application模块的运行时子元素,标识了一个ui。除了 application,一个应用可以声明并实现零至多个其它运行时模块,activity 也同样。activity也包含了许多定义它工作状态的

22、属性,其中:“name”是必 须的,它指定了该activity所在的文件名,如果该文件所属包不同于该应用 的包名(即本描述文件的最开始处),那么名字前面需要加入所在包名。 activity通过增加intent-fliter来标识哪些intent可以被处理,同时intent也是 调度activity的主要参数。 service:service也是application的运行时子元素。service属于后台模块, 启动后将长时间运行,除非停止该service或所在应用进程被杀死 45 androidandroid应用组成元素应用组成元素layoutlayout android 的ui 布局都以la

23、yout 作为容器,在上面按照规定排列控件,这方 面跟java 的swing 和lwuit 很像。控件跟layout 有很多属性是一样的, 可以在properties 里面修改,跟.net/delphi 等rad 类似,其中最常用的 属性有以下这些: id=“+id/edtinput”,id 是连接ui 与代码的桥梁 layout_width=fill_parent ,自动填充至屏幕宽度,layout_height 同理 常用的layout有: linearlayout relativelayout framelayout absolutelayout adapterview 46 andro

24、idandroid应用四大组件简介应用四大组件简介 lactivity lservice lcontentprovider lbroadcastreceiver 47 activityactivity简介简介 l展现为一个用户可视化界面 lactivity可以多种形式呈现,如全屏模式,对话框模式,透明模式等 lactivity的部分重要属性: landroid:label=string resource landroid:icon=drawable resource landroid:launchmode=multiple | singletop |singletask | singleins

25、tance 48 activityactivity的四个状态的四个状态 1.active/runing一个新 activity 启动入栈后,它在屏 幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互 的激活状态。 2. paused 当 activity 被另一个透明或者 dialog 样式的 activity 覆盖时的状态。此时它依然与窗口管理器保持连接, 系统继续维护其内部状态,所以它仍然可见,但它已经失 去了焦点故不可与用户交互。 3. stoped 当 activity 被另外一个 activity 覆盖、失去焦点并不可见时处于 stoped状态。 4. killed activi

26、ty 被系统杀死回收或者没有被启动时处于 killed状态。 49 activityactivity的各个回调函数与状态的各个回调函数与状态 之间的关系之间的关系 l protected void oncreate(bundle savedinstancestate); l protected void onstart(); l protected void onresume(); l protected void onpause(); l protected void onstop(); l protected void ondestroy(); 50 android-应用程序的响应性 在a

27、ndroid中,应用的响应性被活动管理器(activity manager) 和窗口管理器 (window manager(这两个系统服务所监视. 当用户触发了输入事件(如键盘输入,点击按钮等), 如果应用5秒内没有响应用户的输入事件,那么,android会认 为该应用无响应,便弹出anr(application no response) 对话框,如右图. 在正常情况下,android程序会在一条单线程里运行.如果 activity要处理一件比较耗时的工作,应 该交给子线程完成,否侧会因为主线程被阻塞,后面的用户输 入事件因没能在5秒内响应,导致应用出现 anr对话框. serviceserv

28、ice简简 介介 是什么: service在android中是一种长生命周期的组件,它不实现 任何用户界面 用来做什么: 实现不需要用户界面但是需要一直运行的功能,如:音乐播放器 怎么用: 实现一个自己的service 启动执行:context.startservice()/context.bindservice() 52 contentprovidercontentprovider简介简介 lcontentprovider是android提供的一种标准的共享数据的机制, l应用程序可以通过content provider访问其它应用程序的一些私有数据 lcontentprovider的优点:

29、屏蔽了内部数据的存储细节,向外提供 l了上述统一的接口模型 53 broadcastreceiverbroadcastreceiver简介简介 lbroadcastreceiver的作用:每个broadcast receiver都可以接收 一种或若干种intent作为触发事件 lbroadcastreceiver不执行任何任务,仅仅是接受并响应广播 通知的一类组件。 lbroadcastreceiver 不包含任何用户界面 54 基础ui menu:如何打造友好的菜单如何打造友好的菜单 listview:用好列表,做好程序用好列表,做好程序 dialog:人机友好互动交流人机友好互动交流 to

30、ast和和notification:温馨的提醒温馨的提醒 55 android的菜单menu menu 负责管理负责管理menuitem 添加一个添加一个menuitem add (int groupid, int itemid, int order, charsequence title) 删除所有的删除所有的menuitem clear() menuitem 一个菜单的条目一个菜单的条目 常用的方法常用的方法: settitle seticon getitemid() 56 android的菜单menu 1.) 通过代码创建通过代码创建menu public boolean oncreat

31、eoptionsmenu(menu menu) / 分组分组id,item的的id,顺序,名字,顺序,名字 menu.add(0, m_fback, 0, 反馈反馈) .setalphabeticshortcut(f); menu.add(0, m_help, 1, 帮助帮助) .setalphabeticshortcut(h) .seticon(android.r.drawable.ic_menu_help); return true; 57 android的菜单menu 2.) 通过通过xml创建创建menu 在在android工程的工程的res/目录下新增一个目录下新增一个menu/子目

32、录,然后建立子目录,然后建立 option_menu.xml文件文件 oncreateoptionsmenu()方法里通过方法里通过menuinflater类引入定义好的菜单文件类引入定义好的菜单文件 58 option_menu.xml文件 option_menu.xml文件文件 59 public boolean oncreateoptionsmenu(menu menu) menuinflater inflater = getmenuinflater(); inflater.inflate(r.menu.option_menu, menu); return true; 60 61 and

33、roid 的对话框 dialog 生成生成alertdialog三步走三步走 生成一个生成一个alertdialog的构造者的构造者 alertdialog.builder alertdialog.builder builder = new alertdialog.builder(context); 设置属性,包括标题、按钮和图标设置属性,包括标题、按钮和图标 builder.seticon(); builder.settitle(); builder.setpositivebutton(); builder.setnegativebutton(); 最后生成最后生成alertdialog b

34、uilder.create(); 62 提醒 toast toast是是android提供的轻量级的提醒机制提供的轻量级的提醒机制 toast永远不会获得聚焦不会打断用户当前的操作永远不会获得聚焦不会打断用户当前的操作 信息在信息在floating view呈现,然后会自动消失呈现,然后会自动消失 63 如何创建如何创建toast 1.)简单文字信息简单文字信息 通过通过make()方法创建方法创建toast信息信息 调用调用show()方法来显示方法来显示toast提示信息提示信息 2.)复杂复杂toast信息信息 toast支持通过支持通过setview(view)添加添加view组件组件

35、 64 android ui组件 65 常用常用ui组件组件 66 自动文本和选择组件 67 日期和时间选择器 68 girdview gallery imageswitcher 69 ratingbar progressbar 70 activity之间的跳转 intent intent = new intent(); intent.setclass(mainactivity.this, spinneractivity.class); startactivity(intent); 71 intent 72 73 74 action 75 data 76 category 77 78 79 8

36、0 81 编写电话拨号程序 if(phonenumberutils.isglobalphonenumber(t01.gettext().tostring() intent t=new intent(intent.action_call, uri.parse(tel:/+t01.gettext().tostring(); calltel.this.startactivity(t); else toast.maketext(calltel.this, 呼叫电话错误呼叫电话错误, toast.length_long).show(); 82 83 android 系统标准action 84 inten

37、t 跟pendingintent 间的联系 intent英文意思是意图,pending表示即将发生或来临的事情。 pendingintent这个类用于处理即将发生的事情。比如在通知 notification中用于跳转页面,但不是马上跳转。 intent 是及时启动,intent 随所在的activity 消失而消失。 pendingintent 可以看作是对intent的包装,通常通过 getactivity,getbroadcast ,getservice来得到pendingintent的实例,当 前activity并不能马上启动它所包含的intent,而是在外部执行 pendinginte

38、nt时,调用intent的。正由于pendingintent中 保存有当前 app的context,使它赋予外部app一种能力,使得外部app可以如同 当前app一样的执行pendingintent里的 intent, 就算在执行时当前 app已经不存在了,也能通过存在pendingintent里的context照样执行 intent。另外还可以处理 85 intent 跟pendingintent 间的联系 intent执行后的操作。常和alermanger 和 notificationmanager一起使用。 intent一般是用作activity、sercvice、 broadcastr

39、eceiver之间传递数据,而 pendingintent,一般用在 notification上, 可以理解为延迟执行的intent, pendingintent是对intent一个包装。 86 broadcastreceiver broadcastreceiver的作用 broadcastreceiver的类别 broadcastreceiver的工作流程 87 broadcastreceiver 的作用 作用:接收由 sendbroadcast()或者 sendorderedbroadcast 发送的intent 88 broadcastreceiver的类别 l sendbroadcas

40、t : 称为normal broadcast,所有关注该消息的 receiver,都有机会获得并进行处理 l sendorderedbroadcast 称作ordered broadcasts,顾名思义,接受者需 要按资排辈,排在后面的只能吃前面吃剩下的, 前面的心情不好私吞了,后面的只能喝西北风了 (有可能拿不到)。 89 android系统标准broadcast 90 service service 的定义 如何使用service service 的生命周期 91 service 的定义 运行在后台 可以活在自己进程或者其他应用程序的上下文 (context)里面 默认情况下仍然是活在主线

41、程的,所以耗时操作 要起线程来处理 92 如何使用service 通过context.startservice()启动, ontext.stopservice 结束: (1)生成-开始(oncreate-onstart) 过程 (2)service停止的时候进入(ondestroy) 过程 (3)如果调用者退出不调用stopservie,服务还会活着 93 如何使用service 通过context.bindservice启动 (1)只运行oncreate,调用context.unbindservice()结束 (2) 可以通过serviceconnection访问service (3)调用者

42、退出,service则调用onunbind (4)可以实现ipc 94 service 的生命周期 调用startservice的生命周期为:oncreate - onstart(可 多次调用) - ondestroy 调用bindservice的生命周期为:oncreate - onbind(只 一次,不可多次绑定) - onunbind - ondestory 95 service 的生命周期 96 文件操作 preferences sqlite库存储库存储 网络网络 content provider android中的数据保存中的数据保存 97 文件操作 openfileinput op

43、enfileoutput 读取资源文件 getresource().openrawresource(r.raw.xxx) 98 preferences 轻量级的 保存的是原始数据类型 常用于保存程序配置信息 sharedpreferences settings = getsharedpreferences(setting_infos, 0); string name = settings.getstring(name, ); string password = settings.getstring(password, ); 99 过context.getsharedpreferences()得

44、到一个 sharedpreferences。 获取一个editor,对保存的参数进行编辑: commit(),进行提交。 sharedpreferences settings = getsharedpreferences(“info”, 0); editor editor = settings.edit(); editor.putstring(“name”, nameedittext.gettext().tostring() .putstring(“pwd”, passwordedittext.gettext().tostring() .commit(); 100 android-使用嵌入式s

45、qlite android平台上集成的一个嵌入式关系型数据库,sqlite3支持 null,integer,real(浮点数字),text(字符串文本)和 blob(二进制对象)数据类型,虽然它支持的类型只有五种,但实际 上sqlite3也接受varchar(n),char(n),decimal(p,s) 等数 据类型,只不过在运算或保存时会转成对应的五种数据类型. sqlite最大的特点是你可以把各种类型的数据保存到任何字段中,而不 用关心字段声明的数据类型是什么. 但定义为integer primary key的字段只能存储64位整数, 当向这种字段保存除整数以外 的数据时,将会产生错误.

46、另外, sqlite在解析create table语句时, 会忽略字段名后面的数据类型信息. sqlite可以解析大部分标准sql语句,如: 查询语句:select * from . where group by .having . order by 排序子句 sqlite分页同mysql相同: . limit 5 offset 3 | limit 3,5 101 android-使用嵌入式sqlite 首次使用数据库需要创建表及初始化一些信息,升级时需要修改表 信,android提供了抽象类sqliteopenhelper完成此类功能. oncreate(sqlitedatabase db)

47、方法用于首次使用时创建库, onupgrade(sqlitedatabase db, int oldversion, int ewversion)方法检测版本发生变化时更新库. getwritabledatabase()和getreadabledatabase()方法均获取 一个用于操作数据库的sqlitedatabase实例. getwritabledatabase()方法以读写方式打开数据库,一旦数据库的 磁盘空间满了,数据库就只能读而不能写.倘若使用 getwritabledatabase()打开数据库就会出 错.getreadabledatabase()方法先以读写方式打开数据库,如

48、果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试 以只读方式打开数据库. 102 android-使用嵌入式sqlite public class databasehelper extends sqliteopenhelper private static final string name = “lg; /数据库名称 private static final int version = 1; /数据库版本 public databasehelper(context context) super(context, name, null, version); public void

49、oncreate(sqlitedatabase db) db.execsql(create table if not exists person (personid integer primary key autoincrement, name varchar(20), age integer); public void onupgrade(sqlitedatabase db,int oldversion,intnewversion) db.execsql( alter table person add phone varchar(12) null ); 103 android-使用嵌入式sq

50、lite 使用sqlitedatabase数据库 sqlitedatabase db = .; db.execsql(insert into person(name,age) values(?,?),new object.); db.close(); /查询操作 cursor cursor = db.rawquery(select * from person, null); while (cursor.movetonext() int personid = cursor.getint(0); string name = cursor.getstring(1); int age = cursor

51、.getint(2); cursor.close(); db.close(); sqlitedatabase db = databasehelper.getwritabledatabase(); contentvalues values = new contentvalues(); values.put(“name”, “亚嵌教育); . long rowid = db.insert(person, null, values);/ 104 android-使用嵌入式sqlite /删除 sqlitedatabase db = databasehelper.getwritabledatabase

52、(); db.delete(person, personid?, new string2); db.close(); /更新 sqlitedatabase db = databasehelper.getwritabledatabase(); contentvalues values = new contentvalues(); /key为字段名,value为值 values.put(“name”, “亚嵌教育); db.update(person,values,personid=?,new string1); db.close(); 注注: 第一次调用getwritabledatabase()

53、或getreadabledatabase()方法 后,sqliteopenhelper 会缓存当前的sqlitedatabase实例,sqlitedatabase实例正常情况下会维持数据库的打开 状态, 所以在你不再需要sqlitedatabase实例时,请及时调用close()方法释放资源.一旦 sqlitedatabase实例被缓存,多次调用getwritabledatabase()或 getreadabledatabase() 方法得到的都是同一实例. 105 android-单元测试 . public class xmltest extends androidtestcase publ

54、ic void testsomething() throws throwable log.i(test, this is test 日志); system.out.println(ddd); assert.asserttrue(1 + 1 = 3); android-sqlite3工具使用 cmd cd ./tools adb shell #sqlite3 data/data/cn.lg.android/databases/android sqlite.tables | .schemas | .help |.exit(.quit) | select * .nullvalue null/空值数据

55、显示问题 例:.nullvlaue null .header(s) on|off/是否显示列头信息 例:.headers on .mode mode ?table?/指定数据显示风格 例:.mode column 创建表时,只能用integer类型,不能用int作为主键,否则不支持 autoincrement. create table customers(id integer primary key autoincrement,name text); 107 android-sqlite3工具使用 108 android-使用contentprovider 使用内容供应商共享数据. 如果直接

56、访问磁盘文件(sdcard|file|sqlite数据库|首选项),需要很多底 层的交互细节,但是用 该种方式,只使用url即可对应用程序进行访问,并统一了数据访问方式. public class personcontentprovider extends contentprovider public boolean oncreate() public uri insert(uri uri, contentvalues values) . 109 android-使用contentprovider uri: content:/viders.personprovider/10

57、scheme:android规定,必须是content:/ authority:惟一标识该供应商. path:代表操纵的数据. /person /person/10 /person/10/name /将字符串转换成uri对象 uri uri = uri.parse(content:/xxxx/person/10); 110 android-使用contentprovider urimatcher: 使用该类,可以判断uri如何哪一种模式. /若不匹配,返回urimatcher.no_match urimatcher smatcher = new urimatcher(urimatcher.no

58、_match); /一次添加匹配的模式串,以及匹配后返回的数值. /$authority $path smatcher.adduri(cn.lg.contentprovider, person, 1); smatcher.adduri(cn.lg.contentprovider ,person/#,2); switch(smatcher.match(uri) case 1: case 2: . /获取uri后边id部分的话,可以通过 uri uri = uri.parse(content:/vider.personprovider/person) uri resulturi

59、= contenturis.withappendedid(uri, 10);/.person/10 uri.parse(content:/vider.personprovider/person/10) long personid = contenturis.parseid(uri); 111 android-使用contentprovider xxxcontentprovider extends contentprovider . /该方法用于返回当前url所代表数据的mime类型.如果操作的数 据属于集合类型, /那么mime类型字符串应该以vnd.android.curs

60、or.dir/开头 /如:vnd.android.cursor.dir/person. /如果要操作的数据属于非集合类型数据,那么mime类型字符串应 该以/vnd.android.cursor.item/开头 /如:vnd.android.cursor.item/person public string gettype(uri uri). . 112 android-使用contentprovider 使用内容解析器(contentresolver): contentresolver resolver = getcontentresolver(); uri uri = uri.parse(c

温馨提示

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

评论

0/150

提交评论