当前位置:天才代写 > tutorial > 安卓教程 > Android应用开发-数据存储和界面展现(二)

Android应用开发-数据存储和界面展现(二)

2021-02-03 12:30 星期三 所属: 安卓教程 浏览:51

检测

按职位区划

  • 黑盒测试方法:检测逻辑性业务流程

  • 白盒测试方法:检测逻辑性方式

按检测粒度分布分

  • 方式检测: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();
    }

把数据库查询的数据信息表明至显示屏

  1. 随意插进一些数据信息

  2. 界定业务流程bean:Person.java

  3. 获取数据库的全部数据信息

    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();
 

    关键字:

天才代写-代写联系方式