Android应用开发-数据存储和界面展现(二)
检测
按职位区划
-
黑盒测试方法:检测逻辑性业务流程
-
白盒测试方法:检测逻辑性方式
按检测粒度分布分
-
方式检测:function test
-
单元测试卷:unit test
-
系统测试:integration test
-
功能测试:system test
按检测的暴力行为水平分
-
冒烟测试:smoke test
-
稳定性测试:pressure test
单元测试卷junit(对于Eclipse)
-
在明细文档中特定指令系统
<instrumentation android:name="android.test.InstrumentationTestRunner" //特定该检测架构要检测哪一个新项目 android:targetPackage="com.itheima.junit" ></instrumentation>
-
界定应用的类库
<uses-library android:name="android.test.runner"/>
SQLite数据库查询
//建立OpenHelper目标
MyOpenHelper oh = new MyOpenHelper(getContext(), "person.db", null, 1);
//得到数据库查询目标,假如数据库查询不会有,先建立数据库,后得到,假如存有,则立即得到
SQLiteDatabase db = oh.getWritableDatabase();
-
getWritableDatabase():开启可读写能力的数据库查询
-
getReadableDatabase():在储存空间不够时开启写保护数据库查询,不然开启可读写能力数据库查询
-
在建立数据库时创建表
public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL("create table person (_id integer primary key autoincrement, name char(10), phone char(20), money integer(20))"); }
数据库查询的增删
SQL句子
-
insert into person (name, phone, money) values (‘张三’, ‘159874611’, 2000);
-
delete from person where name = ‘李四’ and _id = 4;
-
update person set money = 6000 where name = ‘李四’;
-
select name, phone from person where name = ‘张三’;
实行SQL句子完成增删
//插进
db.execSQL("insert into person (name, phone, money) values (?, ?, ?);", new Object[]{"张三", 15987461, 75000});
//搜索
Cursor cs = db.rawQuery("select _id, name, money from person where name = ?;", new String[]{"张三"});
-
测试标准实行时会启用此方式
protected void setUp() throws Exception { super.setUp(); // 获得虚似前后文目标 oh = new MyOpenHelper(getContext(), "people.db", null, 1); }
应用api完成增删
-
插进
//以键值对的方式储存要存进数据库查询的数据信息 ContentValues cv = new ContentValues(); cv.put("name", "刘能"); cv.put("phone", 1651646); cv.put("money", 3500); //返回值是转行的主键,假如打错回到-1 long i = db.insert("person", null, cv);
-
删掉
//返回值是删掉的个数 int i = db.delete("person", "_id = ? and name = ?", new String[]{"1", "张三"});
-
改动
ContentValues cv = new ContentValues(); cv.put("money", 25000); int i = db.update("person", cv, "name = ?", new String[]{"赵四"});
-
查看
//arg1:要查看的字段名 //arg2:查询条件 //arg3:添充查询条件的占位符 Cursor cs = db.query("person", new String[]{"name", "money"}, "name = ?", new String[]{"张三"}, null, null, null); while(cs.moveToNext()){ // 获得特定列的数据库索引值 String name = cs.getString(cs.getColumnIndex("name")); String money = cs.getString(cs.getColumnIndex("money")); System.out.println(name ";" money); }
事务管理
-
确保好几条SQL句子要不另外取得成功,要不另外不成功
-
最普遍实例:银行转帐
-
事务管理api
try { //打开事务管理 db.beginTransaction(); ........... //设定事务管理实行取得成功 db.setTransactionSuccessful(); } finally{ //关掉事务管理 //假如这时早已设定事务管理实行取得成功,则sql语句起效,不然不起效 db.endTransaction(); }
把数据库查询的数据信息表明至显示屏
-
随意插进一些数据信息
-
界定业务流程bean:Person.java
-
获取数据库的全部数据信息
Cursor cs = db.query("person", null, null, null, null, null, null); while(cs.moveToNext()){ String name = cs.getString(cs.getColumnIndex("name")); String phone = cs.getString(cs.getColumnIndex("phone")); String money = cs.getString(cs.getColumnIndex("money")); //把看到的数据信息封裝至Person目标 Person p = new Person(name, phone, money); //把person目标储存至结合中 people.add(p); }
-
把结合中的数据信息表明至显示屏
LinearLayout ll = (LinearLayout) findViewById(R.id.ll); for(Person p : people){ //建立TextView,每条数据信息用一个输入框表明 TextView tv = new TextView(this); tv.setText(p.toString()); //把输入框设定为ll的子连接点 ll.addView(tv); }
-
分页查询
Cursor cs = db.query("person", null, null, null, null, null, null, "0, 10");
ListView
-
便是用于表明一行一行的条目地
-
MVC构架
-
M:model实体模型层,要表明的数据信息 ————people结合
-
V:view主视图层,客户见到的页面 ————ListView
-
c:control操纵层,实际操作数据信息怎样表明 ————adapter目标
-
-
每一个内容全是一个View目标
BaseAdapter
-
务必完成的2个方式
-
第一个
//系统进程此方式,用于得知实体模型层有多少条数据信息 public int getCount() { return people.size(); }
-
第二个
//系统进程此方式,获得要表明至ListView的View目标 //position:是return的View目标所相匹配的数据信息在结合中的部位 public View getView(int position, View convertView, ViewGroup parent) { System.out.println("getView方式启用" position); TextView tv = new TextView(MainActivity.this); //取得结合中的原素 Person p = people.get(position); tv.setText(p.toString()); //把TextView的目标回到出来,它会变为ListView的内容 return tv; }
-
-
显示屏可以表明多少个内容,getView方式便会被启用几回,显示屏往下滚动时,getView会再次被启用,建立大量的View目标表明至显示屏
条目地缓存文件
-
当内容划到显示屏时,系统软件会把该内容缓存文件至运行内存,当该内容再度进到显示屏,系统软件在再次启用getView的时候会把缓存文件的内容做为convertView主要参数传到,可是传到的内容不一定是以前被缓存文件的该内容,即系统软件有可能在启用getView方式获得第一个内容时,传到随意一个条目地缓存文件
提示框
确定取消提示框
-
建立提示框搭建器目标,相近工厂模式
AlertDialog.Builder builder = new Builder(this);
-
设定题目和文章正文
builder.setTitle("警示"); builder.setMessage("若练此功,当以自宫");
-
设定明确和撤消按键
builder.setPositiveButton("如今自宫", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "祝贺你了自宫取得成功,如今程序流程撤出", 0).show(); } }); builder.setNegativeButton("下一次再聊", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "若不自宫,一定失败", 0).show(); } });
-
应用搭建器建立出提示框目标
AlertDialog ad = builder.create(); ad.show();
单项选择题提示框
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("挑选你的性別");
-
界定单项选择题选择项
final String[] items = new String[]{ "男", "女" }; //-1表明默认设置谁都不选定 //点一下监听的导包要留意别导错 builder.setSingleChoiceItems(items, -1, new OnClickListener() { //dialog:开启这一方式的提示框 //which:客户选定的条目地字符 @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "您挑选了" items[which], 0).show(); //关掉提示框 dialog.dismiss(); } }); //能够立即用搭建器表明提示框 builder.show();
选取提示框
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("挑选你觉得帅的人");
-
界定选取的选择项,由于能够选取,因此 必须一个boolean二维数组来纪录什么选择项被选了
final String[] items = new String[]{ "吴彦祖", "张艺兴", "华仔", "刘德华" }; //默认设置只选定第一个内容 final boolean[] checkedItems = new boolean[]{ true, false, false, false, }; builder.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() { //which:客户点一下条目地字符 //isChecked:用以分辨客户点一下该内容是选定還是撤消 @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { checkedItems[which] = isChecked; } }); //设定一个明确按键 builder.setPositiveButton("明确", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { StringBuffer sb = new StringBuffer(); for(int i = 0;i < items.length; i ){ sb.append(checkedItems[i] ? items[i] " " : ""); } Toast.makeText(MainActivity.this, sb.toString(), 0).show(); } }); builder.show();