黑马Android76期学习笔记01基础--day01--day02单元测试,context,sharePeference,生成xml文件(xml序列化),xml文件解析

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;
        }

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值