android 导入习题:挖穿Android第三十天
android 导入习题:挖穿Android第三十天|单元 |方法 |黑盒 --->不知道 |白盒 --->知道 [2.2]根据测试的粒度
听说有封面才能火
测试相关概念[1]好的产品 不是研发出来的 是测试出来的
[2]测试的分类
[2.1]根据是否知道源代码
|黑盒 --->不知道
|白盒 --->知道
[2.2]根据测试的粒度
|方法
|单元
|系统
|集成
[2.3]暴力测试
|压力
|冒烟
|monkey 数量
Android 单元测试 instrumentation[1]在Manifest.xml中添加测试机
[2]加载测试机
[3]定义一个类继承AndroidTestCase
logcat的使用(日志猫)[1]Log.i(TAG "我是info级别");
[2]Log.d(TAG "我是debug级别");
[3]Log.w(TAG "我是warm级别");
[4]Log.e(TAG "我是error级别");
login登录案例Toast友好提示
保存数据// 判断帐号和密码是否为空
if (TextUtils.isEmpty(name) || TextUtils.isEmpty(pwd)) {
// 帐号和密码为空 显示一个友好的提示
Toast.makeText(this "帐号或者密码为空" 0).show();
} else {
// 判断checkBox控件是否被选中
if (ck_pwd.isChecked()) {
// 保存帐号和密码
boolean result = FileUtils.outputFile(name pwd);
if (result) {
Toast.makeText(this "帐号和密码保存成功" 0).show();
} else {
Toast.makeText(this "帐号和密码保存失败" 0).show();
}
} else {
// 显示帐号和密码
Toast.makeText(this
"登录成功" " 帐号 : " name " 密码 :" pwd 0).show();
}
}
把数据写入到文件里面去
public static boolean outputFile(String name String pwd) {
String result = name "#" pwd;
try {
File file = new File("/data/data/com.heima.login/1.txt");
FileOutputStream fos = new FileOutputStream(file);
fos.write(result.getBytes());
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
文件里面获取数据
public static HashMap<String String> readFile() {
try {
File file = new File("/data/data/com.heima.login/1.txt");
FileInputStream fips = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(
fips));
String result = reader.readLine();
String[] split = result.split("#");
HashMap<String String> map = new HashMap<String String>();
map.put("name" split[0]);
map.put("pwd" split[1]);
return map;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
上下文的使用和存储数据到sd卡上下文的使用
String path = context.getFilesDir().getPath();
FileOutputStream fos = new FileOutputStream(new File(path "1.txt"))
String path = context.getFilesDir().getPath();
FileInputStream fips = new FileInputStream(new File(path "1.txt"))
FileOutputStream fos = context.openFileOutput("1.txt" 0);
FileInputStream fips = context.openFileInput("1.txt");
API
[1]context.getFilesDir().getPath();
[2]context.openFileOutput("into.txt" 0);
[3]Environment.getExternalStorageDirectory().getPath();
[4]Environment.getExternalStorageState();
Environment (Provides access to environment variables.)实际就是访问系统目录的工具
----------
MEDIA_BAD_REMOVAL 在没有挂载前sd卡已经被移除。
MEDIA_CHECKING 正在检查sd卡。
MEDIA_MOUNTED sd卡 挂载,挂载点可读/写。
MEDIA_MOUNTED_READ_ONLY sd卡 挂载,挂载点只读。
MEDIA_NOFS sd卡 是空白或是不支持的文件系统。
MEDIA_REMOVED sd卡 被移除。
MEDIA_SHARED sd卡 正在通过USB共享。
MEDIA_UNMOUNTABLE sd卡 无法挂载。
MEDIA_UNMOUNTED sd卡 没有挂载。
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {}
Environment.getExternalStorageDirectory().getPath() == /mnt/sdcard/
获取sd卡的大小File file = Environment.getExternalStorageDirectory();
//获取总空间
long totalSpace = file.getTotalSpace();
//获取可用空间
long usabSpace = file.getUsableSpace();
String ts = Formatter.formatFileSize(this totalSpace);
String us = Formatter.formatFileSize(this freeSpace);
文件权限的介绍ugo -rwxrw-r--
rwxrwxrwx
r 读 w 写 x 执行
第1位:文件类型(d 目录,- 普通文件,l 链接文件)
第2-4位:所属用户权限,用u(user)表示
第5-7位:所属组权限,用g(group)表示
第8-10位:其他用户权限,用o(other)表示
用数字来表示权限 r=4,w=2,x=1,-=0
rw- = 4 2 = 6
rwx = 4 2 1 = 7
r-x = 4 1 = 5
[1]FileOutputStream fops = openFileOutput("write.txt" MODE_WORLD_WRITEABLE);
[2]FileOutputStream fops = openFileOutput("read.txt" MODE_WORLD_READABLE);
[3]FileOutputStream fops = openFileOutput("append.txt" MODE_APPEND);
[4]FileOutputStream fops = openFileOutput("private.txt" MODE_PRIVATE);
sp的使用Shared Preferences:主要用来保存应用配置和小量数据的一种存储方式 使用类似map
生成XMLXML的作用:是用来存储数据和传输数据
[1]传统方式 自己组拼字符串
[2]官方推荐xml序列化器
[2.1]获取xml的序列化器
[2.2]开始序列化xml
[2.3]开始组拼xml的
```Xml
<?xml version="1.0" encoding="utf-8"?>
<user>
<person>
<name>诸葛</name>
<age>18</age>
</person>
<person>
<name>夏候</name>
<age>20</age>
</person>
<person>
<name>司马</name>
<age>16</age>
</person>
</user>
```
XmlSerializer serializer = Xml.newSerializer();
File file = new File("/mnt/sdcard/person1.xml");
FileOutputStream fops = new FileOutputStream(file);
serializer.setOutput(fops "UTF_8");
serializer.startDocument("utf-8" false);
serializer.startTag(null "user");
for (int i = 0; i < list.size(); i ) {
serializer.startTag(null "person");
serializer.startTag(null "name");
serializer.text(list.get(i).name);
serializer.endTag(null "name");
serializer.startTag(null "age");
serializer.text(list.get(i).age);
serializer.endTag(null "age");
serializer.endTag(null "person");
}
serializer.endTag(null "user");
serializer.flush();
Xml的解析获取事件类型
parser.getEventType()
获取标签名称
parser.getName()
获取属性值
parser.getAttributeValue(0)
获取标签里面的值
parser.nextText()
跳到下一个事件
eventType=parser.next()
ArrayList<Channel> list = new ArrayList<Channel>();
AssetManager assets = getAssets();
InputStream open = assets.open("weather.xml");
XmlPullParser parser = Xml.newPullParser();
parser.setInput(open "utf-8");
int eventType = parser.getEventType();
while (eventType != parser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_TAG:
if (parser.getName().equals("channel")) {
channel = new Channel();
String id = parser.getAttributeValue(0);
channel.id = id;
} else if (parser.getName().equals("city")) {
channel.city = parser.nextText();
} else if (parser.getName().equals("temp")) {
channel.temp = parser.nextText();
}
break;
case XmlPullParser.END_TAG:
if (parser.getName().equals("channel")) {
list.add(channel);
}
break;
}
eventType = parser.next();
}
System.out.println(list.toString());