1.单元测试
单元测试的步骤
- 定义一个类继承AndroidTestCase
- 在清单文件配置uses-library和intrumentation
<uses-library android:name="android.test.runner"/>
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.fengray.unit"/>
2.从context中获取路径
String str=context.getFilesDir().getPath();
此外:
cotext.openFileOutput("infoo.txt",0)
是一个很厉害的方法,可以直接读出文件输出流,不再需要从路径开始读取。(效率高)
3.Environment获取sd卡路径
String sdPath=Environment.getExternalStorgeDirectoy().getPath();
拿sd卡的可用空间和总空间
File file= Environment.getExternalStorageDirectory();//此方法已经过时
long totalspace=file.getTotalSpace();
long usableSpance=file.getUsableSpace();
3.sharePerference存取数据
1、获取sharePerference对象
2、获取sharePerference的编辑器
3、编辑数据
4、提交编辑器对象
SharedPreferences settings= getSharedPreferences("config",0);//拿到sharePerference对象
SharedPreferences.Editor editor=settings.edit();//拿到editor对象
editor.putBoolean("silentMode",mSilentMode);//编辑编辑器,实际是添加数据
editor.commit();//提交编辑器,实际是提交数据
4.生成xml文件方法一:
package com.fengray.ex044;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Telephony;
import android.view.View;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1.初始化要备份的数据
List<Telephony.Sms> smsList=new ArrayList<>();
for (int i=0;i<10;i++){
Telephony.Sms sms=new Telephony.Sms();
sms.setAddress("1008"+i);
sms.setBody("nihao"+i);
sms.setDate("201"+i);
//2、把sms对象加入到集合中
smsList.add(sms);
}
//点击按钮,通过StringBuffer的方式生成一个xml文件
public void click(View view){
//1、创建stringBuffer对象
StringBuffer stringBuffer=new StringBuffer();
//2、开始租拼xml文件头
stringBuffer.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
//3、开始组拼xml根节点
stringBuffer.append("<smss>");
stringBuffer.append("<sms>");
//4、开始组拼sms节点
for (Telephony.Sms sms:smsList){
//5、开始拼接address节点
stringBuffer.append("<address>");
stringBuffer.append(sms.getAddress());
stringBuffer.append("</address>");
//6、开始拼接body节点
stringBuffer.append("<body>");
stringBuffer.append(sms.getBody());
stringBuffer.append("</body>");
//7、开始拼接date节点
stringBuffer.append("<date>");
stringBuffer.append(sms.date());
stringBuffer.append("</date>");
}
stringBuffer.append("</sms>");
//8、把数据保存到sd卡
File file=new File(Environment.getExternalStorageDirectory().getPath(),"smsbackup.xml");
FileOutputStream fileOutputStream= null;
try {
fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(stringBuffer.toString().getBytes());
fileOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
5.生成xml文件方法2,序列化器方法:
步骤
- 1、获取XmlSerialize实例
- 2、设置文件流 作为XmlSerialize的参数
- 3、写文档开头
- 4、写xm的根节点
- 5、循环写其他节点
package com.fengray.ex044;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Telephony;
import android.util.Xml;
import android.view.View;
import org.xmlpull.v1.XmlSerializer;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1.初始化要备份的数据
List<Telephony.Sms> smsList=new ArrayList<>();
for (int i=0;i<10;i++){
Telephony.Sms sms=new Telephony.Sms();
sms.setAddress("1008"+i);
sms.setBody("nihao"+i);
sms.setDate("201"+i);
//2、把sms对象加入到集合中
smsList.add(sms);
}
//点击按钮,通过StringBuffer的方式生成一个xml文件
public void click(View view){
//1、获取XmlSerializer类的实例,通过Xml这个工具类去获取
XmlSerializer serializer= Xml.newSerializer();
//2、设置xmlSerivalizer序列化器参数
File file=new File(Environment.getExternalStorageDirectory().getPath(),"smsackup2.xml");
FileOutputStream fileOutputStream=new FileOutputStream(file);
serializer.setOutput(fileOutputStream,"utf-8");
//3、写xml文档开头
serializer.startDocument("utf-8",true);
//4.写xml问文档的根节点
serializer.startTag(null,"smss");//不需要尖括号
//5、循环写sms节点
for (Telephony.Sms sms:smsList){
//开始address节点
serializer.startTag(null,sms);
serializer.text(sms.getAddress());
serializer.endTag(null,"address");
//开始body节点
serializer.startTag(null,body);
serializer.text(sms.getBody());
serializer.endTag(null,"body");
//开始date节点
serializer.startTag(null,date);
serializer.text(sms.getdate());
serializer.endTag(null,"date");
}
//写xml文档结尾
serializer.endDocument();
}
}
}
6.XML解析一般步骤:
- 1、获取XmlpullParser
XmlPullParser paser= Xml.newPullParser()
- 2、设置XmlpullParser的参数
parser.setInput(in,“utf-8”)
- 3、获取解析的文档的事件类型
int type=parser.getEventType();
- 4、具体判断一下解析的是哪个标签
package com.fengray.ex044;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Telephony;
import android.util.Xml;
import android.view.View;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.Channel;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1.初始化要备份的数据
List<Telephony.Sms> smsList=new ArrayList<>();
for (int i=0;i<10;i++){
Telephony.Sms sms=new Telephony.Sms();
sms.setAddress("1008"+i);
sms.setBody("nihao"+i);
sms.setDate("201"+i);
//2、把sms对象加入到集合中
smsList.add(sms);
}
//点击按钮,通过StringBuffer的方式生成一个xml文件
public void click(View view){
//声明一个集合对象
List<Channel> weatherList=null;
//创建 一个数据模型对象
Channel channel=null;
//1、获取XmlPullParser解析器
XmlPullParser pullParser=Xml.newPullParser();
//2、设置XmlPullParser的参数
pullParser.setInput(in,"utf-8");//in是文件输入流
//3、获得事件类型
int type=pullParser.getEventType();
while (type!=XmlPullParser.END_DOCUMENT){//XmlPullParser.END_DOCUMENT的值为1
//4、具体判断解析到那个节点
switch (type){
case XmlPullParser.START_TAG://解析开始标签
if ("weather".equals(pullParser.getName())){
//5、创建一个集合对象
weatherList=new ArrayList<>();
}else if ("channel".equals(pullParser.getName())){//channel是xml的标签名
//6、创建类对象
channel=new Channel();
//7.获取标签channel的id值
String id=pullParser.getAttributeValue(0);
channel.setId(id);
}else if ("city".equals(pullParser.getName())){//city是xml的标签名
//8、获取city数据
String city=pullParser.nextText();//取下一个数据
channel.setCity(city);
}else if ("temp".equals(pullParser.getName())){//temp是xml的标签名
//8、获取city数据
String temp=pullParser.nextText();//取下一个数据
channel.setTemp(temp);
}else if ("wind".equals(pullParser.getName())){//temp是xml的标签名
//8、获取city数据
String wind=pullParser.nextText();//取下一个数据
channel.setWind(wind);
}
break;
case XmlPullParser.END_TAG:
//判断要解析的结束标签
if ("channel".equals(pullParser.getName())){
weatherList.add(channel);
}
break;
}
//不停的向下解析
type=pullParser.next();
}
return weatherList;
}
}
}