解析及SQLite
sharePreference
Edit it= sp.edit(); ed.putString(“name”,name).commit(); ed.putString(“password”,password).commit(); 使用XML序列化器生成xml文件//拿到序列化器生成xml对象 XmlSerializer xs = Xml.serializer(); //初始化 FileOutputStream fos = new FileOutputStream("sdcard/sms.xml"); //encoding:制定用什么编码生成xml文件 xs.setOutput(fos,"utf-8"); //开始生成xml文件,这个encoding:"utf-8"是xml头结点中的encoding的编码格式 xs.startDocument("utf-8",true); xs.startTag(null,"message"); xs.text(sms,"ssss"); xs.endTag(null,"message"); //告诉序列化器,文件生成完毕 xs.endDocument(); pull解析//获取src文件夹下的资源文件 InputStream is = getClassLoader().getResourceAsStream("weather.xml"); //拿到pull解析器对象 XmlPullParser xp = Xml.newPullParser(); //初始化 xp.setInput(is,"utf-8"); //获取当前节点的事件类型,通过事件类型的判断,知道当前节点是何结点,从而确定我们应该做什么操作,每个类型结点都有一个固定的int值(0,1,2,3,4) int type = xp.getEventType(); City city = null; //一直走,直到走到结束节点 while(type !=XmlPullParser.END_DOCUMENT){ //根据结点的类型,要做不同的操作 switch(type){ case ZXmlPullParser.START_TAG: if("weather".equals(xp.getName())){ //创建city集合对象,用于存放city的javabean对象 cityList = new ArrayList<City>();//全局声明 }else if("city".equals(xp.getName())){ //写一个city的javabean然后存储city的三个数据 city = new City();//City city在成员变量处定义,这样可以全局引用 }else id("name".equals(xp.getName())){ //获取当前节点的下一个节点的文本 String name = xp.nextText(); city.setName(name); }else id("temp".equals(xp.getName())){ //获取当前节点的下一个节点的文本 String temp = xp.nextText(); city.setTemp(temp); }else id("pm".equals(xp.getName())){ //获取当前节点的下一个节点的文本 String pm = xp.nextText(); city.setPm(pm); } break; case ZXmlPullParser.END_TAG: if("city".equals(xp.getName())){ //把city的javabean放入集合中 cityList.add(city); } break; } //把指针移动到下一个节点,并返回该节点的事件类型 type = xp.next(); } 测试
按岗位划分
按测试粒度分
按测试的暴力程度分
单元测试
*在类中写一个test方法,对test选中,然后Run As–> Android Junit Test class myTest extends AndroidTestCase{ public void test(){ //写代码 System.out.println("测试框架跑起来了"); //断言:用来检测实际值与期望值是否一致 assertEquals(期望值,实际值); } } //测一个方法一个test,下一个test2 SqLite 内置的数据库(安卓数据库)定义一个类,MyOpenHelper继承SQLiteOpenHelper//打开帮助器super(context,name,factory,version);//四个参数? context:上下文;一般用MainActivity.this name:数据库的名称 factory:游标工厂;父类是CursorFactory游标所在位置读取数据,移到下一行再读再移;通常传null,就是使用默认的游标工厂 verson:设置 数据库的版本号 重写两个方法:OnCreate():数据库创建时,此方法会调用;OnUpgrade():数据库升级时,此方法会调用 创建表//拿到序列化器生成xml对象 db.execSQL("create table person(_id integer primary key autoincrement,name char(10),salary char(20),phone integer(20))"); //主键是:_id;默认这样写,最好这样写;这个是创建一个person表,含有四个字段(id,姓名,工资,电话);id是主键,自增长! db.execSQL(“create table person(_id integer primary key autoincrement,phone integer(20))”); SQLite:轻量级数据库,不检查数据类型;存入的都是字符串来保存的(所以不用定义类型,但定义类型是给程序员看的,用来表示它应该存储什么类型),但是定义好的类型,数据类型过于不一致,不会存储。 增加数据:insert();//创建一个对象 MyOpenHelper oh = new MyOpenHelper(getContext(),"people.db",null,1); //获取数据库对象 SQLiteDatabase db = oh.getWritableDatabase(); 例子: db.execSQL("insert into person (name,salary,phone)values(?,?,?))",new Object[]{'小志','13000','13838383838'}); db.close(); 上述?是占位符,后面对占位符进行填充。 删除数据 delete//创建一个对象 MyOpenHelper oh = new MyOpenHelper(getContext(),1); //获取数据库对象 SQLiteDatabase db = oh.getWritableDatabase(); db.execSQL("delete from person");删除person所有数据 db.execSQL("delete from person where name= ?",new Object[]{"小志"}); db.close(); 修改数据 update//创建一个对象 MyOpenHelper oh = new MyOpenHelper(getContext(),1); //获取数据库对象 SQLiteDatabase db = oh.getWritableDatabase(); db.execSQL("update person set phone = ? where name = ?",new Object[]{18666,"小志的儿子"}); db.close; 查询数据 select//创建一个对象 MyOpenHelper oh = new MyOpenHelper(getContext(),1); //获取数据库对象 SQLiteDatabase db = oh.getWritableDatabase(); Cursor cursor = db.rawQuery("select name,salary from person",null); //查询了两个字段,所以name索引是0,salary索引是1,索引和select name,salary顺序有关 while(cursor.moveToNext()){ //参数是要查询的数据的索引 String name = cursor.getString(0); //上面写法有时容易混淆,所以还有一种方法查询name值,正式开发写下面这个 //String name = cursor.getString(cursor.getColumnIndex("name")); String salary = cursor.getString(1); } 通过api来增删改(使用数据库代码进行增删改,不好调试,所以出现了api方法,线程封装好的方法)//把要插入的数据全部封装至ContentValues对象(第三个参数) ContentValues values = new ContentValues();//相当于map values.put("name","孙一一"); values.put("phone","15999"); values.put("salary",19999); db.insert("person",values);//第二个数据一般用不上,常写null //返回的是插入数据的行ID或者是主键;插入失败返回-1 //用api删除数据 db.delete("person","name = ? and _id=?",new String[]{"小志的儿子",3}); //删除成功返回的是删除的行数(删了几行数据),返回-1则删除失败 //用api修改数据 ContentValues value = new ContentValues(); value.put("salary",26000);//修改salary字段的值 db.update("person",value,"name = ?",new String[]{"孙一一"}); //返回值是被删除的行数,一行就是1,3行就是3;删除失败返回-1; //用api查询query //db.query("person",new String[]{"name","salary"},); //查询所有字段 Cursor cursor = db.query("person",null); while(curor.moveToNext()){ String name = cursor.getString(cursor.getColumnIndex("name")); String phone = cursor.getString(cursor.getColumnIndex("phone")); String salary = cursor.getString(cursor.getColumnIndex("salary")); System.out.println(name+";"+phone+";"+salary); } 由上看出,api的增删改都封装在了ContentValues类名! SQLite之事物保证所有sql语句要么一起成功,要么一起失败!(银行转账,转出,转入)try{ //开启事物 db .beginTransaction(); ContentValues values = new ContentValues(); values.put("salary",13000); db.update("person",values,new String[]{"小志"}); //values.clear();//有时会携带前面的数据 values.put("salary",15000); db.update("person",new String[]{"小志的儿子"}); //设置 事物执行成功 db.setTransactionSuccessful(); //关闭事物,同时提交,如果已经设置事物执行成功,那么sal语句就生效了,反之sql语句回滚。 } finally{ db.endTransaction(); } 数据库的数据取出,显示在UI上List<person> personList = new ArrayList<Person>(); //把数据库的数据查询处出来 MyOpenHelper oh = new MyOpenHelper(this,1); SQLiteDatabase db = oh.getWritableDatabase(); Cursor cursor = db.query("perosn",null); //先写一个javabean,Person类 while(cursor.moveToNext()){ String _id = cuisor.getString(0); String name =cuisor.getString(1); String phone=cuisor.getString(2); String salary=cuisor.getString(3); Person p = new Person(_id,phone,salary); personList.add(p); } ------------------------------------------------ 查询:从第20行数据开始,读取到10条数据:最后一个null替换成要找的序列(开始位置,读取数据) Cursor cursor = db.query("perosn","20,10") JSON解析的三种解析方式
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |