day02
1 测试的相关概念
[1]好的软件不是开发出的 是不断测试出来的
1.1根据是否知道源代码
黑盒:
白盒:
1.2根据测试的粒度
方法测试
单元测试
集成测试
系统测试
1.3根据测试的暴力程度
压力测试
冒烟测试
谷歌工程师给我们提供了一个monkey + 1000 指令可以进行压力测试
2 单元测试
[1]定义一个类继承AndroidTestCase
[2]在清单文件配置uses-library 和 instrumentation
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.phone.unittest"/>
<!-- 配置函数库 -->
<uses-library android:name="android.test.runner"/>
[3]如果ppt 搞丢了,可以自己手动创建一个Android的测试工程,在测试工程里面都会自动配置好
3 日志猫的使用
Log.v(tag, "我是verbose级别"); ----蓝色
Log.i(tag, "我是info级别"); -----绿色
Log.d(tag, "我是debug级别"); -----黑色
Log.w(tag, "我是warn级别"); -----黄色
Log.e(tag, "我是error级别"); -----红色
4 login登录案例
[1]画UI
[2]根据我们画的UI写对应的业务逻辑
//[2]写按钮的点击事件
public void login(View v)
{
//[2.1]获取用户名和密码
String name = et_name.getText().toString().trim();
String pwd = et_userpassword.getText().toString().trim();
//[2.2]判断name 和 pwd 是否为空
if(TextUtils.isEmpty(name)||TextUtils.isEmpty(pwd))
{
Toast.makeText(MainActivity.this, "用户或密码不能为空", Toast.LENGTH_LONG).show();
}
else
{
//[2.3]进行登录的逻辑
System.out.println("连接服务器进行登录等我们讲到第四天网络编程再说");
if(cb_ischeck.isChecked())
{
//[2.3.1]把数据保存到SD卡需要先判断一下sd卡状态是否可用
if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))
{
//Toast.makeText(MainActivity.this, "sd卡可用", Toast.LENGTH_LONG).show();
//[2.4]把用户名和密码的数据存起来
boolean result = UserInfoUtils.saveInfo(name, pwd);
if(result)
{
Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(MainActivity.this, "保存失败", Toast.LENGTH_LONG).show();
}
}
else
{
Toast.makeText(MainActivity.this, "sd卡不可用", Toast.LENGTH_LONG).show();
}
}
else
{
Toast.makeText(MainActivity.this, "请勾选‘记住用户名密码’", Toast.LENGTH_LONG).show();
}
}
}
5 使用上下文获取常见目录
[1] String path = getFilesDir().getPath();
[2] 使用上下文快速获取文件的输出流和输入流
FileOutputStream fos = context.openFileOutput("info.txt", 0);
FileInputStream fis = context.openFileInput("info.txt");
6 登录数据存储到sd卡
[1]获取sd卡的目录
String sdpath = Environment.getExternalStorageDirectory().getPath();
[2]如何判断sd卡状态是否可用
if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){}
7 获取sd卡可用空间
//[1]找到我们关心的控件
TextView tv_total_size = (TextView) findViewById(R.id.textView2);
TextView tv_useable_size = (TextView) findViewById(R.id.textView1);
//[2]获取sd卡总大小和可用空间
File file = Environment.getExternalStorageDirectory();
//总大小
long totalSpace = file.getTotalSpace();
//可用空间
long usableSpace = file.getUsableSpace();
//[3]转换数据格式
String formatTotalSpace = Formatter.formatFileSize(this, totalSpace);
String formatUseableSpace = Formatter.formatFileSize(this, usableSpace);
//[4]展示到textview上
tv_total_size.setText("总大小:" + formatTotalSpace);
tv_useable_size.setText("可用的:" + formatUseableSpace);
8 文件权限的介绍
修改文件的权限 使用linux下一个指令(chmod)
9 SharedPreferences介绍(☆☆☆☆☆)
[1]获取sp的实例
/**
* name 会帮助我们生成一个xml文件
* mode 模式
*/
SharedPreferences sp = getSharedPreferences("config", 0);
[2]获取编辑器
Editor edit = sp.edit();
[3]存数据
edit.putString("name", name);
edit.putString("pwd", pwd);
[4]最后一定要commit
edit.commit();
10 xml的序列化
[1]StringBuffer 自己组拼
//[1]创建sb对象
StringBuffer sb = new StringBuffer();
//[2]开始组拼xml文件头
sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
//[3]开始组拼xml根节点
sb.append("<smss>");
//[4]开始组拼sms节点
for(Sms sms : smsLists)
{
sb.append("<sms>");
//[5]开始组拼address节点
sb.append("<address>");
sb.append(sms.getAddress());
sb.append("</address>");
//[6]开始组拼body节点
sb.append("<body>");
sb.append(sms.getBody());
sb.append("</body>");
//[7]开始组拼date节点
sb.append("<date>");
sb.append(sms.getDate());
sb.append("</date>");
sb.append("</sms>");
}
sb.append("</smss>");
//[8]把数据保存到sd卡中
try {
File file = new File(Environment.getExternalStorageDirectory().getPath(), "smsbackup.xml");
FileOutputStream fos = new FileOutputStream(file);
fos.write(sb.toString().getBytes());
fos.close();
}
catch (Exception e)
{
e.printStackTrace();
}
[2]使用xmlSerializer 序列化器
<1>获取xmlSerializer 实例
XmlSerializer serializer = Xml.newSerializer();
<2>设置xmlSerializer 序列化参数
File file = new File(Environment.getExternalStorageDirectory().getPath(),"smsbackup2.xml");
FileOutputStream fos = new FileOutputStream(file);
serializer.setOutput(fos, "utf-8");
<3>开始写xml的文档开头
serializer.startDocument("utf-8", true);
<4>写xml根节点
serializer.startTag(null, "smss");
<5>循环写其他结点
for(Sms sms : smsLists)
{
//sms结点开头
serializer.startTag(null, "sms");
//[6]开始address节点
serializer.startTag(null, "address");
serializer.text(sms.getAddress());
serializer.endTag(null, "address");
//[7]开始body节点
serializer.startTag(null, "body");
serializer.text(sms.getBody());
serializer.endTag(null, "body");
//[8]开始date节点
serializer.startTag(null, "date");
serializer.text(sms.getDate());
serializer.endTag(null, "date");
//sms节点结束
serializer.endTag(null, "sms");
}
serializer.endTag(null, "smss");
//文档的结尾
serializer.endDocument();
11 xml的解析
[1]xml的数据来源 来源于服务器 服务器的开发人员通过服务器的技术把数据准备一个xml返回给客户端
[2]对应Android的开发人员 需要做解析的操作 把我们关心的数据取出来就可以了
[3]服务器是以流的形式把数据返回
解析步骤
[1]获取XmlPullParser的实例
XmlPullParser parser = Xml.newPullParser();
[2]设置XmlPullParser的参数
parser.setInput(in,"utf-8");
[3]获取解析的文档的事件类型
int eventType = parser.getEventType();
[4]具体判断一下解析的是哪个便签
//具体判断一下解析到了哪个结点
switch(eventType)
{
//解析开始标签
case XmlPullParser.START_TAG:
//[4]具体判断一下 解析到是哪个开始标签
if("weather".equals(parser.getName()))
{
//[5]创建一个集合对象
weatherLists = new ArrayList<Channel>();
}
else if("channel".equals(parser.getName()))
{
//[6]创建Channel对象
channel = new Channel();
//[7]获取id值
String id = parser.getAttributeValue(0);
channel.setId(id);
}
else if("city".equals(parser.getName()))
{
//[8]获取city的数据
String city = parser.nextText();
channel.setCity(city);
}
else if("temp".equals(parser.getName()))
{
//[9]获取temp的数据
String temp = parser.nextText();
channel.setCity(temp);
}
else if("wind".equals(parser.getName()))
{
//[10]获取wind的数据
String wind = parser.nextText();
channel.setCity(wind);
}
else if("pm250".equals(parser.getName()))
{
//[11]获取pm250的数据
String pm250 = parser.nextText();
channel.setCity(pm250);
}
break;
//解析结束标签
case XmlPullParser.END_TAG:
//判断要解析的结束标签
if("channel".equals(parser.getName()))
{
//把javabean对象存在集合中
weatherLists.add(channel);
}
break;
}
12 今日总结
[0]测试的相关概念(了解)
[1]单元测试(掌握)
定义一个类继承AndroidTestCast
在清单文件里配置一个指令集uses-library
[2]日志猫的使用(了解)
[3]login案例 练习IO(练习一下就可以了)
[4]如何获取sd卡的目录 如何判断sd卡状态是否可用(掌握)
Environment
[5]文件权限的概念(了解)
[6]sp的使用(必须的会)
[7]生成xml的方式
(1)使用StringBuffer(了解)
(2)使用xml的序列化器(掌握)
[8]xml解析(掌握)
只言片语任我说,提笔句句无需忖。落笔不知寄何人,唯有邀友共斟酌。