Android移动开发基础案例教程课件PPT.pptx
· Android开发环境搭建 · 程序结构与打包过程,· Android体系结构 · 开发第一个程序,Android移动开发基础案例教程,第1章 Android基础入门,,1.1 Android简介,1.2 Android开发环境搭建,1.3 开发第一个Android程序,主讲内容,Android本意指“机器人”,Google公司将Android的标识设计为一个绿色机器人, 表示Android系统符合环保概念,是一个轻薄短小,功能强大的移动系统,是第一个真正为手机打造的开放性系统。,,什么是Android,什么是Android,Android和iOS主要区别,第一代通信技术(1G):是指最初的模拟、仅限语音的蜂窝电话标准。 第二代通信技术(2G):是指第2代移动通信技术,代表为GSM,以数字语音传输技术为核心。 第三代通信技术(3G):是指将无线通信与国际互联网等多媒体通信结合的新一代移动通信系统。 第四代通信技术(4G):又称IMT-Advanced技术,它包括了TD-LTE 和 FDD-LTE。,1.1.1 通信技术,,通信技术,Android操作系统最初是由安迪·鲁宾(Andy Rubin)开发出的,2005年被Google收购,并于2007年11月5日正式向外界展示了这款系统。,1.1.2 Android起源,,Android起源,2008年9月发布Android第1个版本Android1.1。 2009年4月30日,Android1.5 Cupcake(纸杯蛋糕)正式发布。 2009年9月5日,Android1.6 Donut(甜甜圈)版本发布。,,Android起源,1.1.2 Android起源,1.1.3 Android体系结构,Dalvik是Google公司自己设计用于Android平台的虚拟机,它可以简单的完成进程隔离和线程管理,并且可以提高内存的使用效率。,1.1.4 Dalvik虚拟机,,Dalvik虚拟机,,1.1 Android简介,1.2 Android开发环境搭建,1.3 开发第一个Android程序,主讲内容,配置环境,下载 Android Studio,安装完成,1.2.1 Android Studio安装,1.2.2 模拟器创建,DDMS全称Dalvik Debug Monitor Service 是Android开发环境中Dalvik虚拟机调试监控服务,是一个可视化的调试工具,是开发环境与模拟器或者真机之间的桥梁。,1.2.3 DDMS的使用,,DDMS的使用,开发人员通过DDMS看到设备的运行状态,可以查看进程信息,LogCat信息,进程分配内存情况,还可以向设备发送短信以及拨打电话等。,,DDMS的使用,1.2.3 DDMS的使用,1.2.4 快捷键设置,Ctrl+D:复制光标所在行的代码,并在此行的下面粘贴出来。 Ctrl+ /:以双斜杠的形式注释当前行的代码,即“//”。 Ctrl+Shift + /:将当前选中代码以文档形式进行标注,即“/*…*/”。 Ctrl+F:在当前类搜索与输入匹配的内容。 Ctrl+X:剪切整行内容。 Ctrl+Y:删除整行内容。 Ctrl+F12:显示当前文件的结构。 Ctrl+ Alt+L:格式化代码。 Ctrl+ Alt+S:打开设置界面。 Ctrl+Shift+Space:自动补全代码。 Shift+Enter:在当前行的下面插入新行,并将代码移动到下一行。 Alt+Enter:自动导入包。,,快捷键,,1.2.4 快捷键设置,,1.2.4 快捷键设置,,1.1 Android简介,1.2 Android开发环境搭建,1.3 开发第一个Android程序,主讲内容,学习Android可以开发出精美的APP。,,1.3.1 实战演练——HelloWorld程序,本小节就教大家如何编写一个HelloWorld程序,并了解Android项目的结构。,1.3.1 实战演练——HelloWorld程序,功能描述:,技术要点:,AndroidStudio中选择【File】【New】【New Project】选项创建项目 点击工具栏中【AVD Manager】按钮启动模拟器 点击工具栏中的运行按钮运行程序,案例代码(详见教材P21—P26),实现步骤:,展示HelloWorld界面。,使用AndroidStudio创建程序, 使用模拟器运行程序。,3,1.3.1 实战演练——HelloWorld程序,,存放AndroidManifest.xml文件,,存放java代码,可创建多个包,,存放Android程序所用到的资源,,存放项目创建的相关文件,1.3.2 Android程序结构,,Android程序开发完成后,如果要发布到互联网上供别人使用,就需要将自己的程序打包成正式的Android安装包文件(Android Package简称APK),其后缀名“.apk”。,,程序打包,1.3.3 Android程序打包,1.3.3 Android程序打包,1.3.3 Android程序打包,1.4 本章小结,课后作业 请简要说明Android体系结构中每个层的功能。 请简要说明模拟器的创建过程。 预习作业 Android常用布局 Android常用控件,Android移动开发基础案例教程,第2章 Android UI开发,· 常用对话框 · 程序调试,· 布局的类型 · 常用控件,简要说明Android体系结构中每个层次的功能。 简要说明模拟器的创建过程。,作业点评,,Android常用布局 Android常用控件,预习检查,,2.4 常见对话框,2.1 布局的创建,2.2 布局的类型,2.3 常用控件,主讲内容,,,第1部分,,第2部分,,第1部分,,第2部分,,第3部分,布局的创建——关于布局,,关于布局,在Android程序中界面是通过布局文件设定的,在每个应用程序创建时会默认包含一个主界面布局,该布局位于res/layout目录中。 实际开发中每个应用程序都包含多个界面,而程序默认提供的一个主界面布局无法满足需求,因此经常会在程序中添加多个布局。,布局的创建——关于布局,布局的创建——步骤,,2.4 常见对话框,2.1 布局的创建,2.2 布局的类型,2.3 常用控件,主讲内容,五种常用布局,线性布局,相对布局,帧布局,表格布局,绝对布局,特点:以水平或垂直方向排列,特点:通过相对定位排列,特点:开辟空白区域,帧里的 控件(层)叠加,特点:表格形式排列,特点:通过x,y坐标排列,五种常用布局,,线性布局,线性布局(LinearLayout)主要以水平或垂直方式来显示界面中的控件。当控件水平排列时,显示顺序依次为从左到右,当控件垂直排列时,显示顺序依次为从上到下。,,2.2.1 线性布局,,orientation属性,,,,2.2.1 线性布局,当控件水平排列时,控件属性layout_width只能设置为wrap_content(包裹内容让当前控件根据控件内容大小自动伸缩),否则其余控件会被挤出屏幕右侧不显示。同理,如果控件垂直排列也会出现同样情况。,当控件水平排列时,如果控件未占满一行,会留有空白区域,这样既不美观又浪费空间。此时,可以利用layout_weight属性解决这个问题,该属性被称为权重,通过比例调整布局中所有控件的大小。,,注意:当控件使用权重属性时,布局宽度属性值通常设置为0。,2.2.1 线性布局——注意事项,,相对布局,相对布局(RelativeLayout)是通过相对定位的方式指定控件位置,即以其它控件或父容器为参照物,摆放控件位置。 在设计相对布局时要遵循控件之间的依赖关系,后放入控件的位置依赖于先放入的控件。,,2.2.2 相对布局,,相对布局, …… ,按钮3,按钮2,按钮1,100dp,20dp,2.2.2 相对布局,2.2.2 相对布局——控件位置属性,2.2.2 相对布局——控件位置属性,2.2.2 相对布局——控件内边距属性,,常用单位,为了让程序拥有更好的屏幕适配能力,在指定控件和布局宽高时应尽量避免将控件宽高设置为固定值。但特殊情况下,需要使用指定宽高值时,可以选择使用以下四种单位: px:像素,即在屏幕中可以显示最小元素单位。 pt:磅数,一磅等于1/72英寸,一般pt会作为字体的单位来显示。 dp:基于屏幕密度的抽象单位。不同设备有不同的显示效果,根据设备分辨率的不同来确定控件的尺寸。 sp:可伸缩像素,采用与dp相同的设计理念,推荐设置文字大小时使用。,2.2.2 相对布局,,帧布局,,帧布局(FrameLayout)为每个加入其中的控件创建一个空白区域(称为一帧,每个控件占据一帧)。 所有控件都默认显示在屏幕左上角,按照先后放入的顺序重叠摆放。帧布局的大小由内部最大控件的决定。,2.2.3 帧布局,,按钮1,按钮2,2.2.3 帧布局,,表格布局,,表格布局(TableLayout)是以表格形式排列控件的,通过行和列将界面划分为多个单元格,每个单元格都可以添加控件。 表格布局需要和TableRow配合使用,每一行都由TableRow对象组成,因此TableRow的数量决定表格的行数。而表格的列数是由包含最多控件的TableRow决定的,例如第1个TableRow有两个控件,第2个TableRow有三个控件,则表格列数为3。,2.2.4 表格布局,,按钮1,按钮2,按钮3,按钮4,按钮5,2.2.4 表格布局,表格布局属性,表格布局控件属性,2.2.4 表格布局,,绝对布局,,绝对布局(AbsoluteLayout)是通过指定x、y坐标来控制每一个控件位置的。,2.2.5 绝对布局,,,设置x坐标,,设置y坐标,2.2.5 绝对布局,,2.4 常见对话框,2.1 布局的创建,2.2 布局的类型,2.3 常用控件,主讲内容,控件是界面组成的主要元素,是与用户进行直接交互的。,,控件的分类,,TextView,,TextView是用于显示文字(字符串)的控件,可在代码中通过设置属性改变文字的大小、颜色、样式等功能。,,2.3.1 TextView,,EditView,,EditText继承自TextView,可以进行编辑操作,将用户信息传递给Android程序。还可以为EditText控件设置监听器,用来测试用户输入的内容是否合法。,,2.3.2 EditView,,Button,,Button是按钮,是用于响应用户的一系列点击事件,使程序更加流畅和完整。,,2.3.3 Button,,点击事件实现方式,指定Button的onClick属性方式 首先在layout文件中指定onClick属性: 然后在Activity中实现这个click方法,android:onClick=“click“,public void click(View v){ Log.i(“指定onClick属性方式“, “button is clicked“); },注意:Activity中实现的方法名称要与onClick属性设置的名称一致。,,2.3.3 Button,,点击事件实现方式,独立类方式 首先为按钮设置监听器: 在onCreate()方法外实现接口,btn.setOnClickListener(myListener);,onClickListener myListener = new OnClickListener() { @Override public void onClick(View v) { Log.i(“独立类方式“, “button is clicked“); } },,2.3.3 Button,,点击事件实现方式,接口方式 首先当前Activity实现OnClickListener接口 然后实现接口方法 最后绑定到Button上,public class MainActivity extends Activity implements onClickListener;,@Override public void onClick(View v) { Log.i(“接口方式“, “button is clicked“); },btn.setOnClickListener(this);,,2.3.3 Button,,点击事件实现方式,匿名内部类方式 在Activity中添加匿名内部类,btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.i(“匿名内部类方式“, “button is clicked“); } });,,2.3.3 Button,,RadioButton,,RadioButton为单选按钮,它需要与RadioGroup配合使用,提供两个或多个互斥的选项集。 RadioGroup是单选组合框,可容纳多个RadioButton,并把它们组合在一起,实现单选状态。,2.3.4 RadioButton,,,,控制RadioButton按钮的排列方向,2.3.4 RadioButton,,设置监听事件,利用setOnCheckedChangeListener()监听RadioGroup控件状态,通过if语句判断被选中RadioButton的id。,radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { if (checkedId == R.id.rbtn) { textView.setText(“您的性别是:男“); } else { textView.setText(“您的性别是:女“); } } });,,2.3.4 RadioButton,,ImageView,,ImageView是视图控件,它继承自View,其功能是在屏幕中显示图像。ImageView类可以从各种来源加载图像(如资源库或网络),并提供缩放、裁剪、着色(渲染)等功能。,,2.3.5 ImageView,,,1,,2,,3,功能描述: 搭建QQ登录界面UI。,技术要点: 使用前几节学习的布局和控件搭建。,案例代码(详见教材P23—P25),实现步骤:,导入图片资源 思考界面结构 布局文件中编写界面代码,2.3.6 实战演练——QQ登录界面,,2.4 常见对话框,2.1 布局的创建,2.2 布局的类型,2.3 常用控件,主讲内容,,常见对话框分类,对话框也是程序与用户交互的一种方式,通常用于显示当前程序提示信息以及相关说明,以小窗口形式展现。 常见对话框有以下几种:,常见对话框,,普通对话框,,普通对话框(Dialog)一般只会显示提示信息,并具有确定和取消按钮。,AlertDialog dialog; dialog = new AlertDialog.Builder(this) .setTitle(“Dialog对话框“) .setMessage(“是否确定退出?“) .setIcon(R.mipmap.ic_launcher) .setPositiveButton(“确定“, null) .setNegativeButton(“取消“, null) .create(); dialog.show();,2.4.1 普通对话框,,单选对话框,,单选对话框和RadioButton作用类似,只能选择一个选项,它是通过AlertDialog对象调用setSingleChoiceItems()方法创建的。,new AlertDialog.Builder(this) .setTitle(“请选择性别“) .setIcon(R.mipmap.ic_launcher) .setSingleChoiceItems(new String[]{“男“, “女“}, 0, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }) .setPositiveButton(“确定“, null) .show();,2.4.2 单选对话框,,多选对话框,,多选对话框通常在需要勾选多种选项时使用,例如添加兴趣爱好、喜爱的电影等。创建多选对话框与创建单选对话框类似,调用setMultiChoiceItems()方法就可实现。,new AlertDialog.Builder(this) .setTitle(“请添加兴趣爱好!“) .setIcon(R.mipmap.ic_launcher) .setMultiChoiceItems(new String[]{“旅游“, “美食“, “汽车“, “宠物“}, null, null) .setPositiveButton(“确定“, null) .show();,2.4.3 多选对话框,,进度条对话框,,进度条对话框一般在应用程序实现耗时操作时使用。Android中提供了两种进度条样式,圆形进度条和水平进度条。,ProgressDialog prodialog; prodialog = new ProgressDialog(this); prodialog.setTitle(“进度条对话框“); prodialog.setIcon(R.mipmap.ic_launcher); prodialog.setMessage(“正在下载请等候.“); prodialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); prodialog.show();,2.4.4 进度条对话框,,消息对话框,,消息对话框(Toast)是轻量级信息提醒机制,显示在应用程序界面的最上层,一段时间后自动消失不会打断当前操作,也不获得焦点。,Toast.makeText ( this, “Hello,Toast“ , Toast.LENGTH_SHORT ).show();,2.4.5 消息对话框,,自定义对话框,,为了提高用户体验,达到更理想的效果,可根据需求自定义对话框样式。具体创建步骤如下:,创建布局 创建一个自定义对话框的布局文件(my_dialog.xml),布局中需要设定对话框的标题、对话框内容以及确定和取消按钮。 创建自定义对话框 创建一个类MyDialog继承自Dialog类,主要用于初始化自定义对话框中的控件以及响应按钮的点击事件。 使用自定义对话框 在MainActivity中,调用MyDialog的构造方法将自定义对话框显示出来,2.4.6 自定义对话框,,2.5 样式和主题,2.6 国际化,2.7 程序调试,主讲内容,,样式,,样式(style)是包含一种或多种控件的属性集合,可以指定控件高度、宽度、字体大小及颜色等。 自定义样式代码如下(styles.xml):, match_parent wrap_content #999999 35sp ,2.5.1 样式,,样式,,引用自定义样式代码如下(activity_main.xml):,,2.5.1 样式,,主题,,主题(theme)应用到整个Activity和Application的样式,当设置好主题后,Activity或整个程序中的视图都将使用主题中的属性,当主题和样式中的属性发生冲突时,样式的优先级要高于主题。 自定义主题代码如下(styles.xml):, #999999 ,2.5.2 主题,,主题,,引用自定义主题代码如下(AndroidManifest.xml):, ,2.5.2 主题,,2.5 样式和主题,2.6 国际化,2.7 程序调试,,国际化简介,国际化(internationalization)的应用具备支持多种语言功能,能被不同国家或地区用户同时访问,提供符合访问者阅读习惯的页面和数据。 由于国际化单词internationalization首字母“I”和尾字母“N”之间有18个字符,因此被简称为I18N。,国际化,,国际化文件的创建,,编写中文内容(strings.xml(zh-rCN)):, 安卓_i18n 你好,世界! ,编写英文内容(strings.xml(en-rUS)):, Android_i18n Hello,world! ,国际化的使用,,编写布局文件内容(activity_main.xml):,,国际化的使用,,2.5 样式和主题,2.6 国际化,2.7 程序调试,主讲内容,,单元测试,,单元测试是指在应用程序开发过程中对最小的功能模块进行测试,可以在完成某个功能之后对该功能进行单独测试。 使用AndroidStudio开发工具完成单元测试非常简单,在项目创建时Android Studio就已经默认创建了一个androidTest包和ApplicationTest类,所有测试的功能模块写入此类即可。,2.7.1 单元测试,,单元测试,,在ApplicationTest类中添加test()测试方法,public class ApplicationTest extends ApplicationTestCase { public ApplicationTest() { super(Application.class); } public void test() throws Exception{ final int expected =1; final int reality =1; assertEquals(expected, reality); } },2.7.1 单元测试,,2.7.1 单元测试,,测试结果正常,,,测试结果错误,2.7.1 单元测试,,LogCat的使用,,LogCat是Android中的命令行工具,用于获取程序从启动到关闭的日志信息。 Log类所输出的日志内容分为五个级别,分别对应Log类中的Log.v()、Log.d()、Log.i()、Log.w()、Log.e()静态方法。Android4.0新增加Assert比较特殊,没有对应的静态方法。,Log.v(“MainActivity“,“Verbose“); Log.d(“MainActivity“,“Degug“); Log.i(“MainActivity“,“Info“); Log.w(“MainActivity“,“Warning“); Log.e(“MainActivity“,“Error“);,2.7.2 LogCat的使用,,,2.7.2 LogCat的使用——过滤显示,,,过滤显示,除了设置过滤器过滤所需的信息外,还可以直接根据Log级别过滤信息。,2.7.2 LogCat的使用——过滤显示,,Debug的使用,,Debug是跟踪程序流程的一种模式,可以通过在代码处设置断点,再利用Debug窗口查看,所谓断点是在代码行加入停止点,当程序执行到该行时会暂停,开发者可以从中查看到此行的变量、数值和内容等。,2.7.3 Debug的使用,,首先编写一个案例,用户输入数字,然后点击按钮计算出累加的总和,接下来在代码行中加入断点查看程序计算过程。,2.7.3 Debug的使用,,2.7.3 Debug的使用,,2.7.3 Debug的使用,,2.7.3 Debug的使用,,日志显示结果,n(输入的整数)值为3,连续点击可查看整个计算过程,程序在for循环语句中反复执行,直到满足循环条件为止。,,2.7.3 Debug的使用,,本章主要讲解了Android中布局以及控件和程序调试等知识。首先介绍了布局的创建,布局的类型,常用控件等,并通过一个QQ登录的案例将这些知识融合在一起。然后讲解几种常用的对话框以及如何通过样式和主题设置界面风格。最后讲解了Android最常用到的单元测试、LogCat以及Debug的使用。 本章所讲解的内容在实际开发中非常重要,基本上每个Android程序都会使用这些内容,因此要求初学者必须熟练掌握,为后面的学习做好铺垫。,,2.8 本章小结,✎ 本章作业 Android中有几种布局,以及每种布局的特点。 LogCat区域中的5种字母所代表的含义。 ✎ 预习作业 Activity的生命周期 Android中跳转Activity有几种方法,Android移动开发基础案例教程,第3章 Activity,· Activity之间的跳转 · Activity中的数据传递,· Activity生命周期 · Activity启动模式,作业点评,请简要说明LogCat区域中的5种字母所代表的含义。 请简要说明Android中有几种布局,以及每种布局的特点。,,Activity的生命周期 Android中跳转Activity有几种方法,预习检查,,3.4 Activity之间的跳转,3.1 Activity的创建,3.2 Activity的生命周期,3.3 Activity的启动模式,主讲内容,2)包名处点击右键选择【New】【Java Class】选项,填写Java类名,完成创建。在该类中继承AppCompatActivity,并在清单文件中进行注册,完成Activity的创建。,1)包名处点击右键选择【New】【Activity】【Empty Activity】选项,填写Activity信息,完成创建。,,两种创建方式,Activity的创建,,3.4 Activity之间的跳转,3.1 Activity的创建,3.2 Activity的生命周期,3.3 Activity的启动模式,主讲内容,启动 状态,运行 状态,暂停 状态,停止 状态,销毁 状态,,3.2.1 生命周期状态,,3.2.2 生命周期方法,,3.4 Activity之间的跳转,3.1 Activity的创建,3.2 Activity的生命周期,3.3 Activity的启动模式,主讲内容,栈是一种“先进后出”的数据结构。Android中,采用任务栈的形式来管理Activity。,,栈的特点,,3.3.1 Android中的任务栈,,,standard模式,standard模式是Activity的默认启动方式,每启动一个Activity就会在栈顶创建一个新的实例。,3.3.2 Activity的四种启动模式,,,singleTop模式,singleTop模式会判断要启动的Activity实例是否位于栈顶,如果位于栈顶则直接复用,否则创建新的实例。,3.3.2 Activity的四种启动模式,,,singleTask模式,singleTask模式下每次启动该Activity时,系统首先会检查栈中是否存在当前Activity实例,如果存在则直接使用,并把当前Activity之上的所有实例全部出栈。,3.3.2 Activity的四种启动模式,,singleInstance模式,singleInstance模式会启动一个新的任务栈来管理Activity实例,无论从哪个任务栈中启动该Activity,该实例在整个系统中只有一个。,3.3.2 Activity的四种启动模式,,3.4 Activity之间的跳转,3.1 Activity的创建,3.2 Activity的生命周期,3.3 Activity的启动模式,主讲内容,,,Intent被称为意图,是程序中各组件进行交互的一种重要方式,它不仅可以指定当前组件要执行的动作,还可以在不同组件之间进行数据传递。 一般用于启动Activity、Service以及发送广播等。根据开启目标组件的方式不同,Intent被分为两种类型显示意图和隐式意图。,Intent(意图),3.4.1 Intent介绍,,显式意图可以直接通过名称开启指定的目标组件,隐式意图通过 指定action和category等属性,系统根据这些信息进行分析后寻找目标Activity,3.4.1 Intent介绍,,显式意图,Intent intent = new Intent(this, Activity02.class); startActivity(intent);,,3.4.1 Intent介绍,,,隐式意图,Intent intent = new Intent(); intent.setAction(“cn.itcast.START_ACTIVITY“); startActivity(intent);,,3.4.1 Intent介绍,,,2,,3,功能描述:,技术要点:,AndroidStudio中选择【File】【New】【New Project】选项创建项目 点击工具栏中【AVD Manager】按钮启动模拟器 点击工具栏中的运行按钮运行程序,案例代码(详见教材P15—P21),实现步骤:,展示HelloWorld界面。,使用AndroidStudio创建程序, 使用模拟器运行程序。,,1,3.4.2 实战演练——打开浏览器,,3.5 Activity中的数据传递,3.2 Activity的生命周期,3.3 Activity的启动模式,3.4 Activity之间的跳转,主讲内容,,,数据传递,Intent intent = new Intent(this,Activity02.class); intent.putExtra(“extra_data“, “Hello Activity02“); startActivity(intent);,Activity之间传递数据需要用到Intent提供的putExtra()方法。,Intent intent = getIntent(); String data = intent.getStringExtra(“extra_data“);,3.5.1 数据传递,,,2,,3,功能描述:,技术要点:,案例代码(详见教材P21—P26),实现步骤:,,1,注册界面的设计与实现 数据展示界面的设计与实现 注册界面逻辑代码的设计与实现 数据展示界面逻辑代码的设计与实现,将注册界面信息传递到展示界面进行展示。,使用Intent传递数据, 获取Intent中的数据。,3.5.2 实战演练——注册用户信息,,,,3.5.3 数据回传,Intent intent = new Intent(this,Activity02.class); startActivityForResult(intent,1);,Intent intent = new Intent(); intent.putExtra(“extra_data“,“Hello Activity01“); setResult(1,intent);,,protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1){ if (resultCode == 1) { String string= data.getStringExtra(“extra_data“); } } },3.5.3 数据回传,,,2,,3,功能描述:,技术要点:,案例代码(详见教材P21—P26),实现步骤:,,1,宠物显示界面的设计与实现 购买装备界面的设计与实现 创建封装装备信息的实体类 购买装备界面逻辑代码的设计与实现 宠物显示界面逻辑代码的设计与实现,将注册界面信息传递到展示界面进行展示。,使用Intent回传数据, Activity之间的跳转。,3.5.4 实战演练——选择宝宝装备,3.6 本章小结,✎ 本章作业 请简要说明Activity有几种启动模式,以及每种启动模式的特点。 请简要写出Activity生命周期中的方法及其作用。 ✎ 预习作业 Android平台提供了几种数据存储方式 XML数据与JSON数据的区别,Android移动开发基础案例教程,第4章 数据存储,· JSON解析 · SharedPreferences,· 数据存储方式 · XML解析,作业点评,请简要说明Activity有几种启动模式,以及每种启动模式的特点。 请简要写出Activity生命周期中的方法及其作用,,Android平台提供了几种数据存储方式 XML数据与JSON数据的区别,预习检查,,4.4 JSON解析,4.1 数据存储方式,4.2 文件存储,4.3 XML解析,主讲内容,文件存储是一种较常用的方法,与Java中的文件存储类似,都是通过I/O流的形式存储数据。 SharedPreferences是Android提供的用来存储一些简单的配置信息的一种机制。 SQLite数据库是Android自带的一个轻量级数据库,支持基本SQL语法。 ContentProvider是Android四大组件之一,可以将自己的数据共享给其他应用程序。 网络存储是通过网络提供的存储空间来存储/获取数据信息。,,,Android中的五种数据存储方式,,4.4 JSON解析,4.1 数据存储方式,4.2 文件存储,4.3 XML解析,主讲内容,,文件存储是Android中最基本的一种数据存储方式,它与Java中的文件存储类似,都是通过I/O流的形式把数据存储到文档中。 Android中的文件存储分为内部存储和外部存储。,内部存储,将应用程序中的数据以文件方式存储到设备的内部,当创建的应用程序被卸载时,其内部存储文件也随之被删除。,是将文件存储到一些外部设备上,例如SD卡或者设备内嵌的存储卡,属于永久性的存储方式。,外部存储,4.2.1 文件存储简介,,内部存储—写入,,String fileName = “data.txt“; String content = “helloworld“; FileOutputStream fos; try { fos = openFileOutput(fileName, MODE_PRIVATE); fos.write(content.getBytes()); fos.close(); } catch (Exception e) { e.printStackTrace(); },4.2.1 文件存储简介,,内部存储—读取,,String content = ““; FileStream fis; try { fis = openFile(“data.txt“); byte[] buffer = new byte[fis.available()]; fis.read(buffer); content = new String(buffer); fis.close(); } catch (Exception e) { e.printStackTrace(); },4.2.1 文件存储简介,,,String state = Environment.getExternalStorageState(); if (state.equals(Environment.MEDIA_MOUNTED)) { File SDPath = Environment.getExternalStorageDirectory(); File file = new File(SDPath, “data.txt“); String data = “HelloWorld“; FileOutputStream fos; try { fos = new FileOutputStream(file); fos.write(data.getBytes()); fos.close(); } catch (Exception e) { e.printStackTrace(); } },