1 / 53

ANDROID PROGRAMMING2

ANDROID PROGRAMMING2. OUTLINE. 加入新 Activity AndroidManifest.xml Activity 間的資料傳送 Intent SQLite 資料庫. 加入新 ACTIVITY. 一個 java 檔對應一個 xml 檔. Report.java. Report.xml. 加入新 ACTIVITY: REPORT.XML. Like main.xml. 加入新 ACTIVITY: REPORT.JAVA. INTENT. 加入新 Activity: 修改原 Activity. 建立 Intent 實體.

bat
Download Presentation

ANDROID PROGRAMMING2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ANDROID PROGRAMMING2

  2. OUTLINE • 加入新Activity • AndroidManifest.xml • Activity間的資料傳送 • Intent • SQLite資料庫

  3. 加入新ACTIVITY • 一個java檔對應一個xml檔 Report.java Report.xml

  4. 加入新ACTIVITY: REPORT.XML • Like main.xml

  5. 加入新ACTIVITY: REPORT.JAVA

  6. INTENT

  7. 加入新Activity: 修改原Activity 建立Intent實體

  8. 加入新Activity: 修改原Activity setClass(原Activity,新Activity)

  9. 加入新Activity: 修改原Activity

  10. ANDROIDMANIFEST.XML • AndroidManifest.xml 是一個用來描述 Android 應用程式「整體資訊」的設定檔。可以向 Android 系統介紹我們的 Android 應用程式,以便讓 Android 系統完整地了解我們的應用程式資訊。

  11. ANDROIDMANIFEST.XML 程式進入點

  12. ANDROIDMANIFEST.XML 版本

  13. ANDROIDMANIFEST.XML Application標籤: 定義應用程式用到的Activity、服務資訊

  14. ANDROIDMANIFEST.XML 這個 Activity 所對應的類別 com.demo.android.bmi.Bmi

  15. ANDROIDMANIFEST.XML 這個Activity式此應用程式的進入點 此Activity將顯示在Launcher的應用程式列表

  16. ACTIVITY • 獨立的Activity 單純的從一個螢幕跳到下個螢幕,不涉及資料的交換。 • 相依的Activity 從一個螢幕跳到下個螢幕時,攜帶資料供下一個螢幕(Activity)使用

  17. ACTIVITY間資料傳送: 傳遞資料 把要傳送的東西用bundle包起來 將bundle附加在intent上

  18. ACTIVITY間資料傳送: 傳遞資料 取出field_height的值轉成字串 在新的Activity中用KEY_HEIGHT識別符號來存取這個值

  19. ACTIVITY間資料傳送: 接收資料 取得傳來的Intent 取得附加在Intent上的bundle物件

  20. ACTIVITY間資料傳送: 接收資料 透過KEY_HEIGHT識別符號取出存在其中的資料

  21. INTENT • 現成的IntentEx. 開啟網頁 • 自訂的Intent Ex. 切換 Activity、在其間傳遞各式的資料。

  22. INTENT 提供網址給Inten.ACTION_VIEW動作,便會開啟網頁瀏覽器

  23. LIST ACTIVITY • 筆記本程式 • 用一個列表來顯示所有的記事條目 • 增加一筆條目 • 刪除選擇的條目 • 編輯選擇的條目

  24. DUMMYNOTE.JAVA Activity ListActivity

  25. DUMMYNOTE.JAVA 自訂的字串陣列,會透過Adapter以List的形式顯示在螢幕上

  26. DUMMYNOTE.JAVA 將字串陣列傳給他並設定好Adapter

  27. MAIN.XML 在xml檔裡定義ListView元件

  28. MAIN.XML 設定當列表是空的時候(沒有資料)要顯示的內容

  29. SQLITE • 在嵌入式系統中常見的資料庫,所有的資料都存在一個檔案中,便於遷移。 • 占用相對於其他資料庫來的少的記憶體空間 • 使用SQL語句來查詢(SELECT)、新增(INSERT)、修改(UPDATE)、刪除(DELETE)、定義資料格式(CREATETABLE)等。

  30. DATABASEHELPER • 繼承SQLiteOpenHelper • 協助我們: • 建立資料表 • 管理資料表

  31. NOTESDBADAPTER.JAVA (DATABASEHELPER:建構子) public class NotesDbAdapter { private static final String DATABASE_NAME = "notes.db"; private static final int DATABASE_VERSION = 1; ....... private static class DatabaseHelper extends SQLiteOpenHelper{ public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } } } 傳入資料庫名稱 做複雜的查詢,一般用不到 物件,可以控制資料庫的開啟和關閉 傳入資料庫版本

  32. NOTESDBADAPTER.JAVA ( DATABASEHELPER:ONCREATE() ) public class NotesDbAdapter { private static final String DATABASE_CREATE = "create table notes(" +"_id INTEGER PRIMARY KEY," +"note TEXT," +"created INTEGER," +"modified INTEGER" +");“; …. private static class DatabaseHelper extends SQLiteOpenHelper{ public void onCreate(SQLiteDatabase db) { db.execSQL(DATABASE_CREATE); } } } 建立一個名為notes的資料表。資料表中有四個欄位,_id欄位會自動計數,note欄位儲存文字型態,created和modified欄位儲存數字型態。

  33. NOTESDBADAPTER.JAVA ( DATABASEHELPER:ONCREATE() ) public class NotesDbAdapter { private static final String DATABASE_CREATE = "create table notes(" +"_id INTERGER PRIMARY KEY," +"note TEXT," +"created INTEGER," +"modified INTEGER" +");“; …. private static class DatabaseHelper extends SQLiteOpenHelper{ public void onCreate(SQLiteDatabase db) { db.execSQL(DATABASE_CREATE); } } } 傳入SQL語句

  34. NOTESDBADAPTER.JAVA ( DATABASEHELPER:ONUPGRADE() ) public class NotesDbAdapter { private static final String DATABASE_TABLE = "notes"; …. private static class DatabaseHelper extends SQLiteOpenHelper{ ….public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL(“DROP TABLE IF EXISTS "+DATABASE_TABLE); onCreate(db); } } } } 若舊版本存在,就將其移除 重新建立資料表

  35. NOTESDBADAPTER.JAVA (建構子) public class NotesDbAdapter { private Context mCtx = null; …. public NotesDbAdapter(Context ctx){ this.mCtx = ctx; } }

  36. NOTESDBADAPTER.JAVA (建構子) public class NotesDbAdapter { private Context mCtx = null; …. public NotesDbAdapter(Context ctx){ this.mCtx = ctx; } }

  37. NOTESDBADAPTER.JAVA ( OPEN() ) 準備好一個相對應的資料庫給我們使用 public class NotesDbAdapter { private DatabaseHelper dbHelper; private SQLiteDatabase db; …. public NotesDbAdapter open() throws SQLException{ dbHelper = new DatabaseHelper(mCtx); db = dbHelper.getWritableDatabase(); return this; } }

  38. NOTESDBADAPTER.JAVA ( CLOSE() ) public class NotesDbAdapter { …. public void close(){ dbHelper.close(); } } 停止對資料的存取

  39. DUMMYNOTE.JAVA public class DummyNote extends ListActivity { …. private NotesDbAdapter mDbHelper; private void setAdapter() { mDbHelper = new NotesDbAdapter(this); mDbHelper.open(); ListAdapter adapter = new ArrayAdapter<String> (this,android.R.layout.simple_list_item_1,note_array); setListAdapter(adapter); } } 在主程式中透過open()打開資料庫

  40. NOTESDBADAPTER.JAVA (加入查詢) public class NotesDbAdapter { …. public Cursor getall(){ return db.rawQuery("SELECT * FROM notes", null); } } rawQuery可以執行SQL語法,傳回一個指針(Cursor)。指針(Cursor)類別是用來存取查詢的結果,程式需要資料表時再透過指針來存取。 SQL語法(SELECT 欄位 FROM 資料表)。從notes資料表中選擇全部資料。

  41. DUMMYNOTE.JAVA(與列表聯繫) public class DummyNote extends ListActivity { private NotesDbAdapter mDbHelper; private Cursor mNotesCursor; …. private void fillData(){ mNotesCursor = mDbHelper.getall(); startManagingCursor(mNotesCursor); …. } } 返回能查詢資料表所有的資料的指針,儲存到mNotesCursor中 讓Activity可以基於本身的生命週期,一併管理Cursor的生命週期。

  42. DUMMYNOTE.JAVA(與列表聯繫) public class DummyNote extends ListActivity { …. private void fillData(){ …. String[] from = new String[]{"note"}; int[] to = new int[]{android.R.id.text1}; SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1,mNotesCursor,from,to); setListAdapter(adapter); } } 從資料表端的note欄位(from)映射到android.R.layout.simple_list_item_1每一列描述格式中的text1欄位(to)裡 將接口和ListView連接

  43. CRUD 增刪改查 • Create: 新增 • Retrieve: 檢索 • Update: 更新 • Delete: 刪除

  44. NOTESDBADAPTER.JAVA ( 檢索) public class NotesDbAdapter { …. public static final String KEY_ROWID = "_id"; public static final String KEY_NOTE = "note"; public static final String KEY_CREATED = "creatred"; String[] strCols = new String[] {KEY_ROWID,KEY_NOTE,KEY_CREATED}; public Cursor getall(){ return db.query(DATABASE_TABLE, //查詢的資料表名稱 strCols,//查詢的資料表欄位 null, //WHERE語句 null,// WHERE語句的參數 null,//GROUP BY語句 null,//HAVING語句 null); //排序語句 } }

  45. NOTESDBADAPTER.JAVA ( 新增) public class NotesDbAdapter { …. public long create(String Note){ Date now = new Date(); ContentValues args = new ContentValues(); args.put(KEY_NOTE, Note); args.put(KEY_CREATED, now.getTime()); return db.insert(DATABASE_TABLE, null, args); } } 內容值類別 用put方法將一對(識別符號,內容值)放進ContentValues

  46. NOTESDBADAPTER.JAVA ( 新增) public class NotesDbAdapter { …. public long create(String Note){ Date now = new Date(); ContentValues args = new ContentValues(); args.put(KEY_NOTE, Note); args.put(KEY_CREATED, now.getTime()); return db.insert(DATABASE_TABLE, null, args); } } 建立現在時間,並填入created欄位

  47. NOTESDBADAPTER.JAVA ( 新增) public class NotesDbAdapter { …. public long create(String Note){ Date now = new Date(); ContentValues args = new ContentValues(); args.put(KEY_NOTE, Note); args.put(KEY_CREATED, now.getTime()); return db.insert(DATABASE_TABLE,//資料表名稱 null, args); //內容值 } Insert方法可以插入資料條目

  48. NOTESDBADAPTER.JAVA ( 刪除) public class NotesDbAdapter { …. public boolean delete(long rowId){ return db.delete(DATABASE_TABLE, //資料表名稱 KEY_ROWID + “=” + rowId, //WHERE語句 null)>0; //WHERE語句的參數 } } 如果找不到這筆資料id,刪除失敗,回傳0

  49. DUMMYNOTE.JAVA ( 新增, 刪除) public class DummyNote extends ListActivity { …. protected static final int MENU_INSERT = Menu.FIRST; protected static final int MENU_DELETE = Menu.FIRST+1; public boolean onCreateOptionsMenu(Menu menu){ menu.add(0,MENU_INSERT,0,"新增"); menu.add(0,MENU_DELETE,0,"刪除"); return super.onCreateOptionsMenu(menu); } } 建立一個menu選單,有新增和刪除兩個選項

  50. DUMMYNOTE.JAVA ( 新增, 刪除) 新增一筆資料,並呼叫fillData()更新列表檢視畫面 public class DummyNote extends ListActivity { private int mNoteNumber =1; …. public boolean onOptionsItemSelected(MenuItem item){ switch(item.getItemId()){ case MENU_INSERT: String noteName = "Note " + mNoteNumber++; mDbHelper.create(noteName); fillData(); case MENU_DELETE: mDbHelper.delete(getListView().getSelectedItemId()); fillData(); } return super.onOptionsItemSelected(item); } }

More Related