Android基礎總結(三)

來源:互聯網
上載者:User

標籤:沒有   context   protect   資料庫檔案   ast   set   help   元素   prim   

測試
  • 黑箱測試
    • 測試邏輯業務
  • 白盒測試

    • 測試邏輯方法
  • 根據測試粒度

    • 方法測試:function test
    • 單元測試:unit test
    • 整合測試:integration test
    • 系統測試:system test
  • 根據測試暴力程度

    • 煙霧測試 (Smoke Test):smoke test
    • 壓力測試:pressure test
單元測試junit
  • 定義一個類繼承AndroidTestCase,在類中定義方法,即可測試該方法

  • 在指定指令集時,targetPackage指定你要測試的應用的包名

    <instrumentation android:name="android.test.InstrumentationTestRunner"android:targetPackage="com.itheima.junit"></instrumentation>
  • 定義使用的類庫

    <uses-library android:name="android.test.runner"></uses-library>
  • 斷言的作用,檢測運行結果和預期是否一致

  • 如果應用出現異常,會拋給測試架構
SQLite資料庫
  • 輕量級關係型資料庫
  • 建立資料庫需要使用的api:SQLiteOpenHelper

    • 必須定義一個構造方法:

      //arg1:資料庫檔案的名字//arg2:遊標工廠//arg3:資料庫版本public MyOpenHelper(Context context, String name, CursorFactory factory, int version){}
    • 資料庫被建立時會調用:onCreate方法
    • 資料庫升級時會調用:onUpgrade方法
建立資料庫
//建立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);//傳回值是改行的主鍵,如果出錯返回-1long 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);}
  4. 把集合中的資料顯示至螢幕

     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); }
  5. 分頁查詢

    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
  • 必須實現的兩個方法

    • 第一個

      //系統調用此方法,用來獲知模型層有多少條資料@Overridepublic int getCount() {    return people.size();}
    • 第二個

      //系統調用此方法,擷取要顯示至ListView的View對象//position:是return的View對象所對應的資料在集合中的位置@Overridepublic 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() {    //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[]{        "趙帥哥",        "趙師哥",        "趙老師",        "侃哥"};//true表示對應位置的選項被選了final boolean[] checkedItems = new boolean[]{        true,        false,        false,        false,};builder.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() {    //點擊某個選項,如果該選項之前沒被選擇,那麼此時isChecked的值為true    @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();

Android基礎總結(三)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.