02-测试、文件读写、xml解析
测试
- 黑盒测试
- 测试逻辑业务
白盒测试
- 测试逻辑方法
根据测试粒度
- 方法测试:function test
- 单元测试:unit test
- 集成测试:integration test
- 系统测试:system test
根据测试暴力程度
- 冒烟测试:smoke test
- 压力测试:pressure test
单元测试junit
定义一个类继承AndroidTestCase,在类中定义方法,即可测试该方法
在指定指令集时,targetPackage指定你要测试的应用的包名
<instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.itheima.junit" ></instrumentation>定义使用的类库
<uses-library android:name="android.test.runner"></uses-library>断言的作用,检测运行结果和预期是否一致
如果应用出现异常,会抛给测试框架
logcat
- 日志信息总共分为5个等级
- verbose
- debug
- info
- warn
- error
- 定义过滤器方便查看
- System.out.print输出的日志级别是info,tag是System.out
Android提供的日志输出api
Log.v(TAG, "加油吧,童鞋们"); Log.d(TAG, "加油吧,童鞋们"); Log.i(TAG, "加油吧,童鞋们"); Log.w(TAG, "加油吧,童鞋们"); Log.e(TAG, "加油吧,童鞋们");
文件读写操作
- Ram内存:运行内存,相当于电脑的内存
- Rom内存:内部存储空间,相当于电脑的硬盘
- sd卡:外部存储空间,相当于电脑的移动硬盘 ###在内部存储空间中读写文件 >小案例:用户输入账号密码,勾选“记住账号密码”,点击登录按钮,登录的同时持久化保存账号和密码 ####1. 定义布局
2. 完成按钮的点击事件
弹土司提示用户登录成功
Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
3. 拿到用户输入的数据
判断用户是否勾选保存账号密码
CheckBox cb = (CheckBox) findViewById(R.id.cb); if(cb.isChecked()){ }
4. 开启io流把文件写入内部存储
直接开启文件输出流写数据
//持久化保存数据 File file = new File("data/data/com.itheima.rwinrom/info.txt"); FileOutputStream fos = new FileOutputStream(file); fos.write((name + "##" + pass).getBytes()); fos.close();读取数据前先检测文件是否存在
if(file.exists())读取保存的数据,也是直接开文件输入流读取
File file = new File("data/data/com.itheima.rwinrom/info.txt"); FileInputStream fis = new FileInputStream(file); //把字节流转换成字符流 BufferedReader br = new BufferedReader(new InputStreamReader(fis)); String text = br.readLine(); String[] s = text.split("##");读取到数据之后,回显至输入框
et_name.setText(s[0]); et_pass.setText(s[1]);应用只能在自己的包名目录下创建文件,不能到别人家去创建
直接复制项目
- 需要改动的地方:
- 项目名字
- 应用包名
- R文件重新导包
使用路径api读写文件
- getFilesDir()得到的file对象的路径是data/data/com.itheima.rwinrom2/files
- 存放在这个路径下的文件,只要你不删,它就一直在
getCacheDir()得到的file对象的路径是data/data/com.itheima.rwinrom2/cache
- 存放在这个路径下的文件,当内存不足时,有可能被删除
系统管理应用界面的清除缓存,会清除cache文件夹下的东西,清除数据,会清除整个包名目录下的东西
在外部存储读写数据
sd卡的路径
- sdcard:2.3之前的sd卡路径
- mnt/sdcard:4.3之前的sd卡路径
storage/sdcard:4.3之后的sd卡路径
最简单的打开sd卡的方式
File file = new File("sdcard/info.txt");写sd卡需要权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>读sd卡,在4.0之前不需要权限,4.0之后可以设置为需要
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>使用api获得sd卡的真实路径,部分手机品牌会更改sd卡的路径
Environment.getExternalStorageDirectory()判断sd卡是否准备就绪
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
查看源代码查找获取sd卡剩余容量的代码
- 导入Settings项目
查找“可用空间”得到
<string name="memory_available" msgid="418542433817289474">"可用空间"</string>查找
memory_available
,得到<Preference android:key="memory_sd_avail" style="?android:attr/preferenceInformationStyle" android:title="@string/memory_available" android:summary="00"/>查找
memory_sd_avail
,得到//这个字符串就是sd卡剩余容量 formatSize(availableBlocks * blockSize) + readOnly //这两个参数相乘,得到sd卡以字节为单位的剩余容量 availableBlocks * blockSize存储设备会被分为若干个区块,每个区块有固定的大小
区块大小 * 区块数量 等于 存储设备的总大小
Linux文件的访问权限
- 在Android中,每一个应用是一个独立的用户
- drwxrwxrwx
- 第1位:d表示文件夹,-表示文件
- 第2-4位:rwx,表示这个文件的拥有者用户对该文件的权限
- r:读
- w:写
- x:执行
- 第5-7位:rwx,表示跟文件拥有者用户同组的用户对该文件的权限
- 第8-10位:rwx,表示其他用户组的用户对该文件的权限
openFileOutput的四种模式
- MODE_PRIVATE:-rw-rw----
- MODE_APPEND:-rw-rw----
- MODE_WORLD_WRITEABLE:-rw-rw--w-
- MODE_WORLD_READABLE:-rw-rw-r--
SharedPreference
小案例:保存来电是否震动和来电铃声大小的配置
1. 定义布局
- 给seekBar组件设置最大值 ####2. 给组件添加侦听拿到组件的状态
给选框设置侦听
CheckBox cb = (CheckBox) findViewById(R.id.cb); //给选框设置侦听 cb.setOnCheckedChangeListener(new OnCheckedChangeListener()给进度条设置侦听
final SeekBar sb = (SeekBar) findViewById(R.id.sb); //给进度条设置侦听 sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener()3. 把组件的状态用SharedPreference保存起来
往SharedPreference里写数据
//拿到一个SharedPreference对象 SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE); //拿到编辑器 Editor ed = sp.edit(); ed.putBoolean("checkBox", isChecked); ed.commit();从SharedPreference里取数据
SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE); //从SharedPreference里取数据 boolean b = sp.getBoolean("checkBox", false);
生成XML文件备份短信
- 整几个虚拟的短信对象,存在list中
- 备份数据通常都是备份至sd卡 ####使用StringBuffer拼接字符串
把整个xml文件所有节点append到sb对象里
sb.append("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"); //添加smss的开始节点 sb.append("<smss>"); .......把sb写到输出流中
fos.write(sb.toString().getBytes());
使用XMl序列化器生成xml文件
得到xml序列化器对象
XmlSerializer xs = Xml.newSerializer();给序列化器设置输出流
File file = new File(Environment.getExternalStorageDirectory(), "backupsms.xml"); FileOutputStream fos = new FileOutputStream(file); //给序列化器指定好输出流 xs.setOutput(fos, "utf-8");开始生成xml文件
xs.startDocument("utf-8", true); xs.startTag(null, "smss"); ......
pull解析xml文件
先自己写一个xml文件,存一些天气信息
拿到xml文件
InputStream is = getClassLoader().getResourceAsStream("weather.xml");拿到pull解析器
XmlPullParser xp = Xml.newPullParser();
开始解析
拿到指针所在当前节点的事件类型
int type = xp.getEventType();事件类型主要有五种
- START_DOCUMENT:xml头的事件类型
- END_DOCUMENT:xml尾的事件类型
- START_TAG:开始节点的事件类型
- END_TAG:结束节点的事件类型
- TEXT:文本节点的事件类型
如果获取到的事件类型不是END_DOCUMENT,就说明解析还没有完成,如果是,解析完成,while循环结束
while(type != XmlPullParser.END_DOCUMENT)当我们解析到不同节点时,需要进行不同的操作,所以判断一下当前节点的name
- 当解析到weather的开始节点时,new出list
- 当解析到city的开始节点时,创建city对象,创建对象是为了更方便的保存即将解析到的文本
当解析到name开始节点时,获取下一个节点的文本内容,temp、pm也是一样
case XmlPullParser.START_TAG: //获取当前节点的名字 if("weather".equals(xp.getName())){ citys = new ArrayList<City>(); } else if("city".equals(xp.getName())){ city = new City(); } else if("name".equals(xp.getName())){ //获取当前节点的下一个节点的文本 String name = xp.nextText(); city.setName(name); } else if("temp".equals(xp.getName())){ String temp = xp.nextText(); city.setTemp(temp); } else if("pm".equals(xp.getName())){ String pm = xp.nextText(); city.setPm(pm); } break;
当解析到city的结束节点时,说明city的三个子节点已经全部解析完了,把city对象添加至list
case XmlPullParser.END_TAG: if("city".equals(xp.getName())){ citys.add(city); }
02-测试、文件读写、xml解析的更多相关文章
- Android 数据存储02之文件读写
Android文件读写 版本 修改内容 日期 修改人 V1.0 原始版本 2013/2/25 skywang Android文件读写的有两种方式.一种,是通过标准的JavaIO库去读写.另一种,是通过 ...
- 使用iozone测试磁盘性能(测试文件读写)
IOzone是一个文件系统测试基准工具.可以测试不同的操作系统中文件系统的读写性能.可以通过 write, re-write, read, re-read, random read, random w ...
- Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件
Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...
- android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 三: 把复杂对象转换成 xml
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- RandomAccessFile 文件读写中文乱码解决方案!
RandomAccessFile 读写文件时,不管文件中保存的数据编码格式是什么 使用 RandomAccessFile对象方法的 readLine() 都会将编码格式转换成 ISO-8859-1 ...
- Android开发8——利用pull解析器读写XML文件
一.基本介绍 对XML解析有SAX和DOM等多种方式,Android中极力推荐xmlpull方式解析xml.xmlpull不仅可用在Android上同样也适用于javase,但在javase环境中需自 ...
随机推荐
- Borg Maze
poj3026:http://poj.org/problem?id=3026 题意:在一个y行 x列的迷宫中,有可行走的通路空格’ ‘,不可行走的墙’#’,还有两种英文字母A和S,现在从S出发,要求用 ...
- Ultra-QuickSort (poj 2002)
Description In this problem, you have to analyze a particular sorting algorithm. The algorithm proce ...
- 使用NetUserAdd API函数创建远程用户
http://apps.hi.baidu.com/share/detail/33407620 使用NetUserAdd编程创建远程用户Windows API NetUserAdd()可以创建Windo ...
- 【HDOJ】2333 Assemble
二分+贪心策略.其中注释处很重要. #include <iostream> #include <cstdio> #include <cstring> #includ ...
- 【最短路】FOJ 2243 Daxia like uber
题目链接: http://acm.fzu.edu.cn/problem.php?pid=2243 题目大意: 给一张N个点M条边的有向图,从s出发,把在x1的人送到y1,在x2的人送到y2用的最短距离 ...
- excel时会弹出向程序发送命令时出现问题的提示框
出现此问题需要做两个操作来解决: 1.在开始所有程序中找到Microsoft Excel 2007的运行程序,右键选择属性,在兼容性标签将“以管理员身份运行此程序”的勾去掉. 2.在打开的Excel程 ...
- SQL 2005远程连接是出错(provider: SQL 网络接口, error: 28 - 服务器不支持请求的协议
SQL 2005远程连接是出错(provider: SQL 网络接口, error: 28 - 服务器不支持请求的协议 sql远程连接服务器网络sql serversqlserver 解决方法:在服务 ...
- 关于Linux
这是一个2B让我写的关于Linux的一点东西. 其实我对Linux一直都是持有一种很尊敬的态度,作为一个非商业性的操作系统,能够成长成这样简直是不可思议,有一种Dota在游戏界的感觉,很让人佩服.但是 ...
- buptoj 1578
题目链接:http://acm.bupt.edu.cn/onlinejudge/newoj/showProblem/show_problem.php?problem_id=1578 #include ...
- 阿里巴巴算法工程师四面(三轮技术+hr面)详细面经
阿里面试总结: 一遍一遍地刷阿里网站,今天发现“面试中”变成“待跟进offer”了,写个面经攒人品,希望offer通知邮件早点来吧. 我当时投简历时投了C/C++工程师,其实也没经过啥考虑,因为我一开 ...