Androidアプリケーション開発-データストレージとインタフェースの展示(二)

8346 ワード

テスト


持ち場別に分ける

  • ブラックボックステスト:テストロジックビジネス
  • ホワイトボックステスト:テストロジック方法
  • テスト粒度別

  • メソッドテスト: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 personset 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

  • は、1行1行のエントリを表示するための
  • である.
  • MVCアーキテクチャ
  • M:modelモデルレイヤ、表示するデータ--peopleセット
  • V:viewビューレイヤ、ユーザが見るインタフェース--ListView
  • c:control制御層、操作データの表示方法--adapterオブジェクト
  • 各エントリは、Viewオブジェクト
  • です.

    BaseAdapter

  • が実装しなければならない2つの方法
  • 最初の
    // , 
    public int getCount() {
        return people.size();
    }
  • 第2の
    // , 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メソッドを呼び出して最初のエントリを取得すると、任意のエントリのキャッシュ
  • が転送される可能性がある.

    ダイアログ


    OKキャンセルダイアログ

  • ダイアログボックスビルダーオブジェクトを作成します.ファクトリモード
    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(" ");
  • は、複数選択可能なオプションを定義します.複数選択可能なため、
    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();
  • が選択されたオプションを記録するためにboolean配列が必要です.