* 移动通讯技术的发展: 第一代通讯技术:模拟信号 工作频段   缺点:保密性差 第二代通讯技术: 体积越来越小  数字信号(加密)   短信  彩信 第三代通讯技术: 数字信号   可处理图像、音乐、视频 第四代通讯技术:目前正在推广的移动通讯    覆盖信号差地方  高清的电视 移动通讯技术发展的本质是什么:传输信息的速度越来越快. * 浅谈Android: 安卓优势:

1. 价格便宜

2.产品涉及领域广

3.市场占有率高

4.开源 就业率高 安卓发展史:

05年被Google收购 07年开发者联盟 08年发布第一款手机G1  开放源代码 安卓版本  1.5~2.3   3.0  4.0~4.4   5.0  6.0 目前流行的版本 4.0~4.4  兼容版本2.1 1.5 Cupcake(纸杯蛋糕) 1.6 Donut(甜甜圈)  11年的时候基本被淘汰了.... 2.1 Eclair(闪电泡芙) 2.2 Froyo(冻酸奶)   2.3 Gingerbread(姜饼)  11~12就在使用 3.0 Honeycomb(蜂巢)    平板开发(片段 碎片化) 4.0 Ice cream SandWich(冰激凌三明治)      兼容平板 手机 4.1 Jelly Bean (果冻豆 ) 4.2 Jelly Bean (果冻豆 ) 4.3 4.4       目前市场上最主流版本开发 (开发的过程中  目标使用4.4开发  兼容2.3) 5.0 Lollipop  (棒棒糖) 6.0 Marshmallow (棉花糖)

1. 分析系统体系结构: 自下而上分析 Linux Kernel:    Linux内核,操作硬件(java不能主动操作硬件,c/c++可以操作硬件)  主要封装了各种驱动代码,通过驱动调用来实现对各种硬件操作        Libraries:   C代码依赖层  C/C++代码   封装Linux内核驱动代码  向上提供服务 Android HAL:  Android的硬件抽象层,把对硬件的支持分成了两层,用户空间和内核空间,其中,硬件抽象层运行在用户空间,而Linux内核驱动程序运行在内核空间。 Adnroid Runtime:  安卓运行时       Core Libraries:      Android 核心函数库所提供的功能,大部分与Oracle的Java 核心函数库相同   Dalvik Virtual Machine:    Dalvik 虚拟机 简称为dvm 主要运行压缩后的代码 .dex Application Framwork:   封装C/C++代码 向(java程序员)应用程序提供服务 App:   应用层 java程序员经常写代码的地方

Android SDK:Android standard develop kits 安卓开发的工具集 目前主流的安卓开发工具: 1.Adnroid-Adt-bundle SDK Manager.exe:  Tools(安卓的开发小工具) 各种安卓版本   Extras 额外的开发包  在线更新/安装的安卓版本的更新工具  不提倡在SDK Manager在线更新安卓版本. sdk: 主要用来存储安卓开发的环境   .android:虚拟机创建的文件   add-ons 存储google的一些API  平时很少 基本没使用  存储google地图 google paly 代码   build-tools 编译工具   docs 安卓文档  目前使用的是http://wear.techbrood.com/guide/index.html 国内镜像   extras  兼容低版本开发   platforms 主要存储不同的安卓版本 如android-19对应的是 android4.4   platform-tools tools  都是安卓开发的时候所需要的小工具  作为环境变量   sources  安卓(java层)应用层的源代码   system-images   jni开发中比较重要  存储不同的安卓处理器平台   arm (安卓1.5版本就开始)   x86  MIPS 4.0以后出现 eclipse:自带了ADT+安卓环境的Eclipse    ADT:eclipse一个插件 连接安卓环境 2.Android Studio

1、 安卓模拟器: 安卓模拟器是一款模拟软件。它能在电脑上模拟安卓手机系统,并能安装、使用、卸载安卓.apk应用软件,让你在电脑上也能体验操作安卓系统的全过程。

2、安卓调试机器分类: * Eclipse 内置模拟器创建流程                 AVD name:   虚拟机名称 avd-版本名称                 Device       :   不同屏幕的设备(android市场上目前有多种多样的设备 不同设备的尺寸不一样)                 Target       :安卓运行版本                 CPU/ABI   :不同处理器平台 arm嵌入式设备  x86(电脑上)   MIPS(标准)                 KeyBorad :   是否显示硬键盘                 RAM          : 内存大小                 VM Heap  :  应用堆内存大小(每个应用所能使用的最大堆内存空间)                 Internal Storage   : 手机内部硬盘存储                 SD Card     :    手机外部硬盘存储 * Genymotion模拟器( 虚拟机-->创建模拟器) 下载地址:https://www.genymotion.com/ * 夜神模拟器 下载地址:http://www.yeshen.com/ * 真机调试

AVD name:   虚拟机名称 avd-版本名称                 Device       :   不同屏幕的设备(android市场上目前有多种多样的设备 不同设备的尺寸不一样)                 Target       :安卓运行版本                 CPU/ABI   :不同处理器平台 arm嵌入式设备  x86(电脑上)   MIPS(标准)                 KeyBorad :   是否显示硬键盘                 RAM          : 内存大小                 VM Heap  :  应用堆内存大小(每个应用所能使用的最大堆内存空间)                 Internal Storage   : 手机内部硬盘存储                 SD Card     :    手机外部硬盘存储

* Genymotion模拟器( 虚拟机-->创建模拟器) 下载地址:https://www.genymotion.com/

* 夜神模拟器 下载地址:http://www.yeshen.com/

* 真机调试

DDMS 的全称是Dalvik Debug Monitor Service,是 Android 开发环境中的Dalvik虚拟机调试监控服务。 DDMS里面包含了:Device(设备)  File Explorer(文件管理)  Emulator Control(模拟器管理)   LogCat(日志) 1 Devices(设备)     -设备名称     -应用对应的包名(进程号) 关闭某个应用进程:Devices-->选择某一进程-->Stop 绿色爬虫(调试按钮) 2 File Explorer(文件管理) linux文件系统 判断标准:有没有盘符 >Permissions    显示文件、文件夹的读 写 执行权限 >com.android.xxx为某个应用的安装文件夹     -data/data/com.android.xxx/databases    包含了数据库文件 数据库事件文件     -data/data/com.android.xxx/shared_prefs    包含了sharedPreference存储文件 >文件的导入导出 3 Emulator Control (模拟器控制) -Speed    设置通讯技术如2.5G 3G 4G -Telephony Actions    模拟打电话    发短信 -Longitude    经度 -Latitude     纬度 4 LogCat(日志) 定制自己开发环境 工作区 * 选择工作区   Window-->Open Perspective-->Other..-->选择想要的工作区 * 保存工作区   Window-->Save Perspective As... * 重置工作区   Window-->Reset Perspective .. 子视图 * 选择视图  Window-->Show View-->Other..

创建一个简单项目的开发步骤:

1. 创建工程     Application Name: 应用名称     Project Name:  Eclipse项目名称     Package Name:包名,一般格式为公司域名的倒叙+项目名,如com.m520ot.appname     Minimum Required SDK: 应用所需的最低版本     Targer SDK:  针对开发的版本     Compile With: 编译版本 一般目标版本和编译版本都是目前市场上最流行的版本     Theme:  主题 整个应用的样式 2. 编写应用程序的ui界面,res-->layout-->activity_main.xml 3. 写java代码,在src目录下。MainActivity-->setContentView(resId); 4. 选中项目 右键 运行项目 导入项目: 右键Import-->General-->Existing Projects into Workspace...

Android项目结构: src    我们编写的java代码。 gen    (G)自动生成资源文件对应的代码 Android4.4 Android Private Libraries   安卓导入的依赖包 assets    资产目录 打包一些文件到应用程序里面(数据库文件,网页文件,配置文件) bin    将java代码和资源编译打包成.apk文件 libs    安卓开发所需要存放的第三方开发包 res    资源目录    drawable      图标    layout            布局文件    menu             菜单配置文件    values    dimens     安卓的控件尺寸    strings     存储所有文本    styles     样式文件    colors     颜色文件    ids      存储安卓控件的id的文件

AndroidManifest.xml    安卓配置文件 相当于javaweb的properties文件 project.propertise        工程的配置文件 配置安卓版本 第三方依赖包的路径 proguard-project.txt  配置混淆编译的规则

应用程序编译安装过程:

1.把所有的.java文件编译成.class文件 >jdk的javac.exe

2.把所有的.class字节码文件打包合成一个文件classes.dex(压缩文件) >\sdk\build-tools\android-4.4目录下的dx.bat 3.根据资源id,生成一个resources.ap_ 保存所有的资源信息 4.把.dex文件,res目录下的资源文件,resources.ap_文件 asset目录下的文件合成一起打包成一个apk压缩包 > 使用\sdk\build-tools\android-4.4\aapt.exe 5. adb.exe 负责把生成好的apk文件上传安装到手机里面。 > Android debug bridge 安卓调试桥 负责上传安装apk

adb命令

1. 安装一个应用程序 adb install xxx.apk

2. 卸载一个应用程序 adb uninstall com.xx.xx.xx

3. 进入到手机终端(安卓手机是linux系统,此后就可以开始执行linux终端命令) adb shell     (ls -l查看当前目录下的文件    pwd查看当前文件路径  cd xxx 跳到某个文件夹下    cd.. 返回上一层)

4. 杀死adb的调试桥(当调试桥不稳定的时候) adb kill-server 启动adb的调试桥 adb start-server

5. 查看连接到电脑上的设备 adb devices

6. 指定设备执行的adb指令 adb -s  emulator-5556 install xxx.apk

二.

View的属性:

1. 控件的宽高:(固定值 与两种状态) android:layout_width="30dp" android:layout_height="30dp"

2. 控件的可见度:(3种状态) android:visibility="visible"

3. 控件的背景:(颜色 图片) android:background="#F00"

4. 盒子模型: android:layout_margin="10dp" android:padding="5dp"

5. 点击事件: android:onClick="haha" 颜色值:颜色值基本有四种表现方式 (0表示在某个通道的颜色成分为空  F表示某个颜色通道为100%) RGB(红绿蓝): #000~#FFF ARGB(透明度+红绿蓝):  #0000~#FFFF RRGGBB:  #000000~#FFFFFF AARRGGBB:  #00000000~#FFFFFFFF View与ViewGroup的关系: 1. View表示控件  View与View之间是无法嵌套 2. 为了让控件能够嵌套其他控件 才产生了ViewGroup 3. ViewGroup的继承关系 ViewGroup一般比较少使用 我们一般使用其子类实现。 View --ViewGroup ----AbsoluteLayout ----FrameLayout ----LinearLayout ----TableLayout ----RelativeLayout

二.一

LinearLayout: 线性布局指的是该布局下包含的子布局列表为横线或者竖线排布。 重要属性: 指定方向:(横向布局/纵向布局)  android:orientation="" 权重:android:layout_weight=""  (只能在LinearLayout的子控件中使用)

二.二

RelativeLayout: 相对布局 (相对父控件布局 相对兄弟控件布局)

针对父控件

android:layout_centerHorizontal 横向居中

android:layout_centerVertical    纵向居中

android:layout_centerInParent     横向纵向居中

跟父控件顶部/底部/最左边/最右边对齐

android:layout_alignParentTop

android:layout_alignParentBottom

android:layout_alignParentLeft

android:layout_alignParentRight

针对已存在的兄弟控件(在某个控件的上面/下面/左边/右边)

android:layout_above

android:layout_below

android:layout_toLeftOf

android:layout_toRightOf

相对兄弟控件的边对齐

android:layout_alignTop

android:layout_alignBottom

android:layout_alignLeft

android:layout_alignRight

二.三

FrameLayout: 帧布局  越是后面写的控件越在顶层 (应用场景: 霓虹灯 自定义一些高级的UI控件) 层层叠加

二.四

AbsoluteLayout :绝对布局 控件在父控件中的绝对定位   (应用场景: 机顶盒开发 ) android:layout_x="30dp" android:layout_y="30dp"

TableLayout: 表格布局 (应用场景: 银行表格)

<TableLayout />   表格标签

<TableRow />   表格行标签 该标签可以不使用

二.五

文本 按钮 输入框的继承关系

TextView: android:text="文本"

android:textSize="20sp"

android:textColor="#FF0"

android:textStyle="bold"

android:lines="3"

android:singleLine="true"

android:typeface="monospace" //设置字型。字形有:normal, sans, serif,monospace

android:clickable=””

Button:

属性与TextView基本相似。

不同点:

1. 按钮是自带了背景的控件

2. 按钮是可以点击了

EditText:

android:hint="请输入QQ"

android:editable="true"

android:maxLength="50"

设置最大的字数

android:inputType="textPassword"

二.六

ToggleButton:

android:textOn="开启"

android:textOff="关闭"

android:checked="true"

RadioButton:

<RadioGroup />  单选组 <RadioButton />

单选框 设置监听器的时候,通过 RadioGroup   radioGroup.setOnCheckedChangeListener();

android:checked="true"

CheckBox: 设置监听器的时候 每个

android:checked="false"

1.没有进度的进度条

大进度条

style="?android:attr/progressBarStyleLarge"

小进度条 style="?android:attr/progressBarStyleSmall"

2.有进度的进度条

style="?android:attr/progressBarStyleHorizontal"

android:progress="80"

android:max="100"

3.可拖动的进度条

SeekBar:

可拖动的进度条

android:max="100"

android:progress="50"

4.星星进度条 RatingBar:

星星进度条 基本单位为半颗星

android:numStars="4"

android:rating="3.5"

android:stepSize="0.3"

设置图片源

android:src="@drawable/ic_launcher"

代码设置图片源

imageView.setImageResource(resId) imageView.setImageBitmap(bm);

imageView.setImageDrawable(drawable);

设置缩放模式 android:scaleType=""

二.七

1. 手机界面无法容纳更多的控件的时候,就需要滚动界面。

2. ScrollView :控制上下滑动的效果

3. HorizontalScrollView: 控制左右滑动的效果

4. ScrollView与HorizontalScrollView只能容纳一个子控件。

二.八

1. 日期选择器:

2. 时间选择器: 24小时制

二.九

除了以上的代码步骤,还需要告诉用户 我们需要使用上网的权限。

二.10

用途:圆角的输入框  单色背景的按钮 开发步骤:

1. 创建drawable文件夹

2. 创建一个shap文件. 文件名:业务名_控件名缩写_bg

3. 应用到控件上

二.11

一般只有使用带进度的进度条,需要修改其背景 就需要使用LayerlistDrawable

开发步骤:

1.创建drawable文件夹

2.创建一个Layerlist文件

3. 应用到控件

二.11

1. 什么时候需要用到9Patch图?      图片拉伸模糊

2. 9Patch工具在哪里?       ..\android-adt-bundle\sdk\tools\draw9patch.bat

3. 如何使用 9Patch?     打开工具-->修改图片-->保存成.9.png格式的图片

三.

  1. Android下的常用单位

px,dp,sp等3个概念:

px:电脑 电视上的分辨率的尺寸单位。像素是构成数码影像的基本单元。例如300x300分辨率,即表示水平方向与垂直方向上每英寸长度上的像素数都是300,也可表示为一平方英寸内有9万(300x300)像素。

dp:过去,程序员通常以像素为单位设计计算机用户界面。例如:图片大小为80×32像素。这样处理的问题在于,如果在一个每英寸点数(dpi) 更高的新显示器上运行该程序,则用户界面会显得很小。在有些情况下,用户界面可能会小到难以看清内容。由此我们采用与分辨率无关的度量单位来开发程序就能够解决这个问题。Android应用开发支持不同的度量单位。推荐使用使用dp单位,与平时所说的dip是一样的。(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,不依赖像素。

sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。

目前市场上所有主流的机型被划分为5种类型(120dpi的基本不再支持) DPI:dots per inch,一英寸的像素数量 在代码中设置控件的大小 系统默认的单位是px.

  1. LogCat的使用

日志的原理

  1. 等级日志的划分

设置日志的Tag拦截

  1. 动态输入拦截

备注:

  1. 当应用程序直接报错的时候,可以找到error等级的日志,然后查看cause by附近的日志。
  2. 当应用运行时不报错,但与预期的效果不一致,可以查看warn日志,比如有的功能缺少了使用权限。

3.测试相关的概念

  1. 好的应用都是被测出来的
  2. 测试的分类:

根据是否知道源代码:

白盒测试: 知道源代码 根据源代码来进行测试 (程序员 高级测试人员)

黑盒测试: 不知道源代码 知道产品的功能 根据功能去测试 (大部分小型公司的做法)

根据测试的粒度(精细程度):

方法测试: 写一个测试方法 测试某个类里面的方法

单元测试:可以测试某一个方法 测试多个方法 (安卓下的单元测试 测试Dao层)

集成测试: 软件除了有前端 还有后台 如果对软件的某一模块的前端 后台做统一的测试系统测试: 对同一产品下的多个软件进行统一测试 多个软件之间存在一定的关系.

测试的暴力程度:

压力测试: 单一的时间内 进行重复的频繁的测试. 用来检验系统的稳定性

冒烟测试: 一段时间内的重复的 无规律的测试

4.Android下的单元测试

android下的单元测试可以直接用来测试某个方法而不需要直接写完整个功能                            android下的junit测试用例与普通的pc机下的java代码不一样,要把应用程序部署到模拟器或者真实的手机才能测试。android下的单元测试既可以测试一个方法 也可以测试多个方法

Android JunitTest开发步骤:

  1. 写一个业务方法 public class MockCalculator {
/**
* 模拟的业务方法 可以认为当前就是对数据库进行操作
*/
public  static  int  add(int  x,int  y){ return  x+y;
}/**
* 模拟的业务方法 可以认为当前就是对数据库进行操作
*/
public  static  int  multi(int  x,int  y){ return  x+y;
}
  1. 创建一个类继承AndroidTestCase
  1. 编写测试代码(记住抛异常)。

assertEquals(期待的结果,真实的结果)

/**
*单元测试可以测试一个方法 也可以测试多个方法
*1.写一个类继承AndroidTestCase
* */
public  class  CalculatorTest  extends  AndroidTestCase{/**
*1.写一个方法 用来测试想要测试业务方法
*测试的时候可能会报错 要把错误告诉系统
* */
public  void  testAdd()throws  Exception{
int  result  =  MockCalculator.add(3,  5);
//expected  期望的值  actual实际得到的结果 assertEquals(8,  result);
}//2.  02_单元测试 does  not  specify  a
//android.test.InstrumentationTestRunner  instrumentation
//  or  does  not  declare  uses-library  android.test.runner
//in  its  AndroidManifest.xmlpublic  void  testMulti()throws  Exception{
int  result  =  MockCalculator.multi(3,  5);
//expected  期望的值  actual实际得到的结果 assertEquals(15,  result);
}
}
  1. 配置AndroidMenifest.xml清单文件。
<!--第三步 配置权限-->
<uses-library  android:name="android.test.runner"  /><!--android:targetPackage  需要测试的包 一般是应用的包名-->
<instrumentation    android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.m520it.test"/>
  1. 运行测试代码,对着方法名右键,run as android junit test。
  1. 根据红色或者绿色判断错对。

5.Android下的数据读写

如何在手机上保存数据:

  1. android的文件系统使用的是linux的文件系统(没有c盘 d盘..)
  2. android下应用程序的路径和javase不同,直接保存在根目录下会报错.这是因为如果大家都能保存到根目录 那么别的应用也能读取到你存储的文件信息 这样就造成了不安全性

1. 保存数据到文件中一般有两个方法

保存到/data/data/应用的包名/files目录

数据选型:一般保存的是重要的信息 用户信息 应用的配置 手机如何清除应用保存的数据:设置->应用程序->应用详情->clear data (删除

cache目录 删除files目录 )

保存到/data/data/应用的包名/cache目录: 数据选型: 一般可以用来缓存不重要的数据 保存图片 手机如何清除应用保存的数据:设置->应用程序->应用详情->clear cache (删除cache目录下的文件 )

6.手机存储目录的划分

  1. 手机内部存储

Environment.getDataDirectory(); --> /data/..

file目录 cache目录 容量有限,价格比较贵,访问速度快

创建的文件在手机内部存储空间,默认的权限全部私有,只有自己的应用程序可以访问。别的应用程序不可以访问实验:模拟一个黑客程序访问我们的QQ保存信息

  1. 手机外部存储

Environment.getExternalStorageDirectory();--> /mnt/sdcard/.. sd卡(手机常见插拔的容量卡) 容量大,可以更换,价格便宜。

// 三星 小米 魅族
//  /mnt/sdcard
//  /mnt/storage01
//  /mnt/storage02
//  /mnt/mount/storage01
  1. 代码
//1.内部存储 /data
File  dataFile  =  Environment.getDataDirectory();
Log.v("520it",  dataFile.getAbsolutePath());
//2.外部存储
//  /storage/emulated/0
//  /mnt/sdcard
File  extralFile  =  Environment.getExternalStorageDirectory();
Log.v("520it",  extralFile.getAbsolutePath());

7.SD卡读写的操作

  1. 将文件写入到SD卡上 首先要判断SD卡是否装载
  2. 写一个空文件到Sd卡上
public  void  downloadClick(View  v){ try {
//下载一个空的文件 1024*1024*10  到SD卡
//1.SD卡是可以插拔的 判断下SD卡是否装载
String  externalState  =  Environment.getExternalStorageState();
if  (externalState.equals(Environment.MEDIA_MOUNTED))  {
//2.创建一个空的文件
File  parentFile  =  Environment.getExternalStorageDirectory();File  file=new  File(parentFile,  "葫芦娃.avi");
//字节流
FileOutputStream  fos=new  FileOutputStream(file);
byte[]  buff=new  byte[1024*1024];
for  (int  i  =  0;  i  <  10;  i++)  { fos.write(buff);
}
fos.close();
}
}  catch  (Exception  e)  { e.printStackTrace();
}
}
  1. 因为读写SD卡是敏感的行为 需要用户同意 所以需要使用”使用权限”

解决方案:找到AndroidMenifest.xml文件,在后面添加使用权限

<uses-permission  android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

8.内部存储目录文件的访问模式

如何创建被其他应用访问的文件:

  1. 在/data/data/ 下,每个包名代表一个应用(进程)
  2. 文件系统的功能

1. 让别的程序访问我们程序的数据 openFileOutput("文件名",“访问模式”);//openFileInput()读进来 MODEWORLDREADABLE 别的应用程序可以读取你的文件 MODEWORLDWRITEABLE 别的应用程序可以写入你的文件 MODEWORLDREADABLE + MODEWORLDWRITEABLE 别的应用程序可以对你的文件读写

9.SharedPreference的使用

当想保存一个应用的配置信息时,可以通过key-value的形式存储到手机上,安卓提供了类似的存储,称为SharedPreference

  1. 自己定义的文件规则可能与用户的操作冲突.所以一般使用保存某个数据采用的是SharedPreference.
  2. 保存数据
/**
* 将数据保存到手机里面-->文件系统-->将"账号#密码"写到文件里面去
*/
private  void  saveData(String  passport,  String  password)  { SharedPreferences  sp=getSharedPreferences("qqinfo",  MODE_PRIVATE);
//2.往sp里面存储键值对 在存储多个值的时候可能会报错--->事务(原子性)
/**
* 将数据保存到手机里面-->文件系统-->将"账号#密码"写到文件里面去
*/
private  void  saveData(String  passport,  String  password)  { SharedPreferences  sp=getSharedPreferences("qqinfo",  MODE_PRIVATE);
//2.往sp里面存储键值对 在存储多个值的时候可能会报错--->事务(原子性)
  1. 可以查看信息 保存到/data/data/包名/shared_prefs/qqinfo.xml 中 保存文件格式为xml.
  1. 如何获取数据
/**
* 读取文件里面的数据 回显文本
*/
private  void  readData()  {
SharedPreferences  sp=getSharedPreferences("qqinfo",  MODE_PRIVATE);
//defValue  如果找不到对应的值 应该怎么办
String  passport  =  sp.getString("username",  ""); mPassportEt.setText(passport);
String  password  =  sp.getString("pwd",  ""); mPasswordEt.setText(password);
}

四.

SQLiteExpertPersSetup 下载地址:

链接:https://pan.baidu.com/s/18hPneRkMGEocPqQ3tzeQ2g 
提取码:vyoc

四.一

  1. 数据存储的几种方式

    1. 保存成一般File格式
    2. SharedPerference
    3. 数据库 当我们有大量相似结构的数据,并想实现增删查改,推荐使用数据库
    4. 通过内容提供者 保存到别的应用的数据库里面 提供访问方式
    5. 网络

如果想自己创建一个SharedPerference生成的文件

  1. Xml序列化器生成xml文件

XmlSerializer开发步骤:

public static void saveXmlByStringBuilder(Context c, String passport, String password) throws Exception {
// <map>
// <string name="pwd">123</string>
// <string name="username">5abc#12345</string>
// </map>
// 1.创建需要写⼊入的字符串
StringBuilder sb = new StringBuilder(); sb.append("<map>");
sb.append("<string name=\"pwd\">" + passport + "</string>"); sb.append("<string name=\"username\">" + password + "</string>"); sb.append("</map>");
String result = sb.toString();
// 2.设置将要写⼊入的⽂文件位置
// 因为getFilesDir()ֻ在Context中定义 这⾥里需要传⼊入Context File file = new File(c.getFilesDir(), "qqinfo.xml");
// 3.写⼊入到流中(字符流)
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
// 4.开始写⼊入writer.write(result); writer.close();
}
  1. 创建一个xml序列化工具
  2. 设置产生的文件保存到某个位置
  3. 开始创建文件

开始写文档开始标签文本

结束标签

结束文档

  1. 代码

public static void saveXmlByXmlSerializer(Context c, String passport, String password) throws Exception {
// 1.创建xmlSerializer ⽤用来创建xml的序列化⼯工具
XmlSerializer xmlSerializer = Xml.newSerializer();
// 2.设置⽂文件输出到什么位置
FileOutputStream fos = c.openFileOutput("qqinfo.xml", Context.MODE_PRIVATE);
xmlSerializer.setOutput(fos, "utf-8");
// <map>
// <pwd>123</pwd>
// <username>zhangsan</username>
// </map>
// 3.开始写⼊入⽂文档
// <?xml version='1.0' encoding='utf-8' standalone='yes' ?> xmlSerializer.startDocument("utf-8", true);xmlSerializer.startTag(null, "map");xmlSerializer.startTag(null, "pwd"); xmlSerializer.text(password); xmlSerializer.endTag(null, "pwd");xmlSerializer.startTag(null, "username"); xmlSerializer.text(passport); xmlSerializer.endTag(null, "username");xmlSerializer.endTag(null, "map");
//4.结束写⼊入⽂文档 此时会将内存中的数据写⼊入到硬盘中
xmlSerializer.endDocument();
}
  1. Pull解析器工作的过程

解析xml的几种方式:

  1. Dom解析

DOM(文档对象模型)是W3C标准,提供了标准的解析Xml方式,但其解析效率一直不  尽如人意,这是因为DOM解析XML文档时,把所有内容一次性的装载入内存,并构建一个驻留在内存中的树状结构(节点数)。如果需要解析的XML文档过大,或者我们只  对该文档中的一部分感兴趣,这样就会引起性能问题。

特性:基于树状的xml的结构

支持:Dom4j dom4j是一个Java的XML API,它也是一个开放源代码的软件,是jdom的升级品,用来读写XML文件的。

  1. SAX解析

SAX(Simple API for XML)是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法,它既是一个接口,也是一个软件包.但作为接口,SAX是事件驱  动型XML解析的一个标准接口不会改变  SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档

(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继  续同样的扫描,直至文档结束。

  1. Pull解析

Pull是Android内置的xml解析器。Pull解析器的运行方式与SAX   解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并  触发相应事件。事件将作为数值代码被发送。

Pull开发步骤:

  1. 创建一个Pull解析器
  2. 将文件读进来
  3. 开始解析文档

判断如果没有读取文档完毕 就循环遍历拿到开标签

拿到开标签后面的文本 pullParser.nextText();

移动游标

代码

public static String parseXmlFile(Context c) throws Exception { String result="";
// 1.创建Pull解析器
XmlPullParser pullParser = Xml.newPullParser();
// 2.绑定需要解析的⽂文件
FileInputStream fis = c.openFileInput("qqinfo.xml"); pullParser.setInput(fis, "utf-8");
// 3.获取读取到的事件类型
int eventType = pullParser.getEventType();
//Log.v("520it", eventType + " ");
// 3.2pullParser.next() 读取下⼀一个事件类型
//eventType = pullParser.next();
// 3.3 pullParser.getName() 获取标签名
//Log.v("520it", pullParser.getName() + " ");
// 3.4 如果事件类型是text 那么getname则会返回null
// 3.5 pullParser.nextText() 获取标签后⾯面的⽂文本
while (eventType!=XmlPullParser.END_DOCUMENT) {
//  <map> <pwd> <username>
if (eventType==XmlPullParser.START_TAG) {
if (pullParser.getName().equals("username")) { result+=("  username="+pullParser.nextText());
}else if (pullParser.getName().equals("pwd")) { result+=(" pwd="+pullParser.nextText());
}
}
eventType = pullParser.next();
}return result;
}
  1. 如何创建数据库

Android下的Sqlite数据库

SQLite,是一款轻型的数据库,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而   且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需  要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很   多程序语言相结合,SQLite第一个Alpha版本诞生于2000年5月。 至2016年已经有16个年头, SQLite也迎来了一个版本 SQLite 3已经发布。

如何创建数据库

创建数据库帮助类(构造器)

//数据库表⽂文件public static final String DB_NAME="contact.db";//数据库版本public static final int DB_VERSION=1;public DbOpenHelper(Context context) { super(context, DB_NAME, null, DB_VERSION);}

创建一般文件

File file=new File(getFilesDir(),"mock.txt"); file.createNewFile();

创建数据库文件

MyOpenHelper helper=new MyOpenHelper(this); helper.getReadableDatabase();

创建数据库表

@Override
//数据库⽂文件创建的时候调⽤用该⽅方法
public void onCreate(SQLiteDatabase db) { System.out.println("onCreate");
//创建数据库表
db.execSQL("create table contactinfo(_id integer primary key autoincrement," +"username varchar(20),phone varchar(15));");
}

数据库更新


//数据库更新 只要跟之前的数据库版本不⼀一样 则会调⽤用 该⽅方法可以修改数据库表的各种数
据
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.v("520it", "onUpgrade"+"  oldVersion="
+oldVersion+" newVersion="+newVersion);
}

保存数据库文件:/data/data/包名/databases/xxx.db

  1. 数据库增删改查的SQL语句

增加(插入联系人 手机号到数据库):

insert into contactinfo (username,phone) values('zhangsan','150188888888');

修改(设置zhangsan的手机为1501111111):


update contactinfo set phone='150111111111' where username='zhangsan';

删除(删除那个叫李四的联系人)

delete from contactinfo where username='lisi';

查询(查询电话为15022222222的用户):

select username,phone from contactinfo where phone='15022222222';
  1. 数据库增删改查代码实现

开发步骤:

首先在Sqlite expert工具中确保SQL语句正常运行.

创建Dao层 封装你需要的Dao业务(CURD)

创建界面去调用

代码

* 添加⼀一个联系⼈人*/public void insertContact(String username,String phone){SQLiteDatabase db = mHelper.getWritableDatabase();
db.execSQL("insert intocontactinfo("+DbCons.COLUMN_USERNAME+","+DbCons.COLUMN_PHONE+") values(?,?);",new String[]{username,phone});}/*** 对某个电话号码⾥里⾯面的联系⼈人改名*/public void updateContact(String phone,String newUsername){
SQLiteDatabase db = mHelper.getWritableDatabase(); db.execSQL("update contactinfo set "+DbCons.COLUMN_USERNAME+"=?where "+DbCons.COLUMN_PHONE+"=?;",new String[]{newUsername,phone});}/*** 查询某个联系⼈人的信息*/public void queryContact(String username){
SQLiteDatabase db = mHelper.getWritableDatabase();Cursor cursor = db.rawQuery("select "+DbCons.COLUMN_PHONE+" from contactinfo where "+DbCons.COLUMN_USERNAME+"=?;",new String[]{username});// cursor.moveToNext() 移动到下⼀一⾏行 如果有下⼀一⾏行 则返回true while (cursor.moveToNext()) {String phone = cursor.getString(0);
Log.v("520it", phone);}}/*** 删除某个联系⼈人*/public void deleteContact(String username){
SQLiteDatabase db = mHelper.getWritableDatabase();db.execSQL("delete from contactinfo where"+DbCons.COLUMN_USERNAME+"=?;
",new String[]{username});}
  1. Sqlite3工具的使用

Sqlite3工具的位置:

..\android-adt-bundle\sdk\tools\sqlite3.exe

如何进入sqlite3命令行:

  1. 先执行adb -s 模拟器名称 shell
  2. linux shell命令: cd /data/data/包名/databases 到databases目录下 pwd 查看当前的目录位置

Sqlite3工具常用操作:

sqlite3 数据库文件名(进入了数据库) 查看该文件下的所有数据库表 .tables

查看某个数据库表结构 select * from 表名; 退出sqlite3 .quit

  1. 数据库增删改查的Google实现

插入联系人名称和电话号码

public boolean insertContact(String username,String phone){SQLiteDatabase db = mHelper.getWritableDatabase();
//nullColumnHack    _id username    phone   指定该列对应字段的值不能为空
//values    将数据通过数据库字段保存到数据库⾥里⾯面
ContentValues values=new ContentValues();
values.put(DbCons.COLUMN_USERNAME, username);values.put(DbCons.COLUMN_PHONE, phone);
long insert = db.insert(DbCons.TABLE_NAME,null, values);return insert!=-1;
}

修改电话为phone的联系人用户名为:


public boolean updateContact(String phone,String newUsername){SQLiteDatabase db = mHelper.getWritableDatabase();
ContentValues values=new ContentValues();values.put(DbCons.COLUMN_USERNAME, newUsername);
//whereArgs 绑定的值
//返回 修改了n⾏行 就返回多少n
int update = db.update(DbCons.TABLE_NAME, values,"phone=?", new String[]{phone});
return update>0;
}

插入某个用户的电话号码

public String queryContact(String username){
SQLiteDatabase db = mHelper.getWritableDatabase();
//columns 结果集返回了⼏几列
Cursor cursor = db.query(
DbCons.TABLE_NAME, new String[]
{DbCons.COLUMN_PHONE},
DbCons.COLUMN_USERNAME+"=?", new String[]{username}, null, null, null);
//当返回的结果确定只有⼀一⾏行数据
if (cursor.moveToFirst()) {
//  通过字段名 返回字段的索引
int columnIndex = cursor.getColumnIndex(DbCons.COLUMN_PHONE);
//  columnIndex 通过索引返回某⼀一⾏行所在的列的值
return cursor.getString(columnIndex);
}
return "";
}

删除某个联系人


public boolean deleteContact(String username){
SQLiteDatabase db = mHelper.getWritableDatabase();
int rowEffected = db.delete(DbCons.TABLE_NAME,
DbCons.COLUMN_USERNAME+"=?", new String[]{username});return rowEffected>0;
}

android入门基础笔记,Sqlite数据库下载相关推荐

  1. Android基础总结+SQlite数据库【申明:来源于网络】

    Android基础总结+SQlite数据库[申明:来源于网络] 基础总结篇之一:Activity生命周期:http://blog.csdn.net/liuhe688/article/details/6 ...

  2. 安卓视频开发 mysql_在Android应用中使用SQLite数据库(传智播客视频笔记)

    在Android应用中使用SQLite数据库 应用生成的数据库文件保存为/data/data/应用包名/databases/name.db,生成的文件可用SQLite Expert打开 (name是自 ...

  3. android 入门 006(sqlite增删改查)

    android 入门 006(sqlite增删改查) package cn.rfvip.feb_14_2_sqlite;import android.content.Context; import a ...

  4. Android studio+SQLCipher加密SQLite数据库的几个坑

    Android studio SQLCipher加密SQLite数据库的几个坑 前言:Android 自带的SQLite数据库可以用于数据存储,但是,大家都知道其数据是存储于手机的data/data/ ...

  5. sqlite数据库android使用教程,Android开发教程之 SQLite数据库的使用

    在开发Android应用程序时经常需要存储数据,Android系统提供了SQLite数据库,还提供了SQLiteOpenHelper类,使我们可以很方便的操作数据库.通过一个例子来说明在Android ...

  6. Android 绿豆通讯录【SQLite数据库---数据库(增删改查、展示数据)】

    前情提要:Android 数据库(SQLite) [简介.创建.使用(增删改查.事务.实战演练).数据显示控件(ListView.Adapter.实战演练-绿豆通讯录)] https://blog.c ...

  7. android:Android中用文件初始化sqlite数据库(zz)

        很多时候在应用安装初始化时,需要创建本地数据库,同时为数据库添加数据,之后再从数据库中读取数据. 这里有2个思路 1.先在本地创建一个能支持android使用的sqlite数据库文件,启动时, ...

  8. android属于数据库管理系统,详细谈谈Android系统中的SQLite数据库的应用

    数据库是按照数据结构来组织.存储和管理数据的仓库,而在信息话的社会,数据库又不单单仅限与数据的相关内容,现在数据库技术是管理信息系统.办公自动化系统.决策支持系统等各类信息系统的核心部分,而SQL是结 ...

  9. Android入门(十二)SQLite事务、升级数据库

    原文链接:http://www.orlion.ga/610/ 一.事务 SQLite支持事务,看一下Android如何使用事务:比如 Book表中的数据都已经很老了,现在准备全部废弃掉替换成新数据,可 ...

最新文章

  1. java-方法。(新手)
  2. Flex警告:framework.swc”具有默认样式并且在 library-path 中,表...
  3. python学习笔记:遍历目录
  4. ubuntu18.04 ROS melodic—创建简单的机器人模型smartcar
  5. 英语学习—每天进步一丢丢系列(一)
  6. 20200729:力扣199周周赛题解(下)
  7. 535 5.7.8 Error: authentication failed: generic failure安装EMOS时SMTP测试报错
  8. xampps mysql无法启动
  9. Android -- Layout布局文件里的android:layout_height等属性为什么会不起作用?
  10. 这就是搜索引擎 (豆瓣).html 1.index 第1章 搜索引擎及其技术架构 1 第2章 网络爬虫 12 第3章 搜索引擎索引 36 第4章 索引压缩 76 第5章 检索模型与搜索排序 99
  11. html页面能直接用vuex吗,vuex(多用于不同页面之间的数据共用和修改)
  12. 泰拉瑞亚云服务器的搭建
  13. Mac如何创建快捷方式?
  14. DVD to MP4视频格式转换器v3.1.0 中文版
  15. 思科服务器首页怎么修改,修改思科服务器cimc地址
  16. uvm event 事件机制
  17. 一个很精致的HelloWorld,你看得懂么?
  18. 你在用哪种编程字体?
  19. Google 的免费云服务器的 SSH 管理
  20. jquery点击图片进行放大缩小

热门文章

  1. 解析搜索引擎的Robots协议
  2. DPM2010保护Sharepoint
  3. SLG手游Java服务器的设计与开发——架构分析
  4. 华为牛人在华为工作十年的感悟!--总结[华为的10年工作]
  5. 弃用数据库自增ID,曝光一下我自己用到的解决方法之---终结篇
  6. 在Windows环境下为Python 2.5安装SSL模块
  7. Apache WEB 服务器企业实战
  8. jenkins 忘记密码或认证配置出错后解决办法
  9. zabbix 监控项-计算公式监控磁盘使用率
  10. linux系统安全检查