android programming2
Download
Skip this Video
Download Presentation
ANDROID PROGRAMMING2

Loading in 2 Seconds...

play fullscreen
1 / 53

ANDROID PROGRAMMING2 - PowerPoint PPT Presentation


  • 136 Views
  • Uploaded on

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 實體.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' ANDROID PROGRAMMING2' - bat


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
outline
OUTLINE
  • 加入新Activity
  • AndroidManifest.xml
  • Activity間的資料傳送
  • Intent
  • SQLite資料庫
activity
加入新ACTIVITY
  • 一個java檔對應一個xml檔

Report.java

Report.xml

slide8

加入新Activity: 修改原Activity

setClass(原Activity,新Activity)

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

程式進入點

androidmanifest xml3
ANDROIDMANIFEST.XML

Application標籤:

定義應用程式用到的Activity、服務資訊

androidmanifest xml4
ANDROIDMANIFEST.XML

這個 Activity 所對應的類別

com.demo.android.bmi.Bmi

androidmanifest xml5
ANDROIDMANIFEST.XML

這個Activity式此應用程式的進入點

此Activity將顯示在Launcher的應用程式列表

activity1
ACTIVITY
  • 獨立的Activity

單純的從一個螢幕跳到下個螢幕,不涉及資料的交換。

  • 相依的Activity

從一個螢幕跳到下個螢幕時,攜帶資料供下一個螢幕(Activity)使用

activity2
ACTIVITY間資料傳送: 傳遞資料

把要傳送的東西用bundle包起來

將bundle附加在intent上

activity3
ACTIVITY間資料傳送: 傳遞資料

取出field_height的值轉成字串

在新的Activity中用KEY_HEIGHT識別符號來存取這個值

activity4
ACTIVITY間資料傳送: 接收資料

取得傳來的Intent

取得附加在Intent上的bundle物件

activity5
ACTIVITY間資料傳送: 接收資料

透過KEY_HEIGHT識別符號取出存在其中的資料

intent1
INTENT
  • 現成的IntentEx. 開啟網頁
  • 自訂的Intent

Ex. 切換 Activity、在其間傳遞各式的資料。

intent2
INTENT

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

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

Activity

ListActivity

dummynote java1
DUMMYNOTE.JAVA

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

dummynote java2
DUMMYNOTE.JAVA

將字串陣列傳給他並設定好Adapter

main xml
MAIN.XML

在xml檔裡定義ListView元件

main xml1
MAIN.XML

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

sqlite
SQLITE
  • 在嵌入式系統中常見的資料庫,所有的資料都存在一個檔案中,便於遷移。
  • 占用相對於其他資料庫來的少的記憶體空間
  • 使用SQL語句來查詢(SELECT)、新增(INSERT)、修改(UPDATE)、刪除(DELETE)、定義資料格式(CREATETABLE)等。
databasehelper
DATABASEHELPER
  • 繼承SQLiteOpenHelper
  • 協助我們:
    • 建立資料表
    • 管理資料表
slide31

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

}

}

}

傳入資料庫名稱

做複雜的查詢,一般用不到

物件,可以控制資料庫的開啟和關閉

傳入資料庫版本

slide32

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欄位儲存數字型態。

slide33

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語句

slide34

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

}

}

}

}

若舊版本存在,就將其移除

重新建立資料表

slide35

NOTESDBADAPTER.JAVA

(建構子)

public class NotesDbAdapter {

private Context mCtx = null;

….

public NotesDbAdapter(Context ctx){

this.mCtx = ctx;

}

}

slide36

NOTESDBADAPTER.JAVA

(建構子)

public class NotesDbAdapter {

private Context mCtx = null;

….

public NotesDbAdapter(Context ctx){

this.mCtx = ctx;

}

}

slide37

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;

}

}

slide38

NOTESDBADAPTER.JAVA

( CLOSE() )

public class NotesDbAdapter {

….

public void close(){

dbHelper.close();

}

}

停止對資料的存取

dummynote java3
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()打開資料庫

slide40

NOTESDBADAPTER.JAVA

(加入查詢)

public class NotesDbAdapter {

….

public Cursor getall(){

return db.rawQuery("SELECT * FROM notes", null);

}

}

rawQuery可以執行SQL語法,傳回一個指針(Cursor)。指針(Cursor)類別是用來存取查詢的結果,程式需要資料表時再透過指針來存取。

SQL語法(SELECT 欄位 FROM 資料表)。從notes資料表中選擇全部資料。

dummynote java4
DUMMYNOTE.JAVA(與列表聯繫)

public class DummyNote extends ListActivity {

private NotesDbAdapter mDbHelper;

private Cursor mNotesCursor;

….

private void fillData(){

mNotesCursor = mDbHelper.getall();

startManagingCursor(mNotesCursor);

….

}

}

返回能查詢資料表所有的資料的指針,儲存到mNotesCursor中

讓Activity可以基於本身的生命週期,一併管理Cursor的生命週期。

dummynote java5
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連接

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

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); //排序語句

}

}

slide45

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

slide46

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欄位

slide47

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方法可以插入資料條目

slide48

NOTESDBADAPTER.JAVA

( 刪除)

public class NotesDbAdapter {

….

public boolean delete(long rowId){

return db.delete(DATABASE_TABLE, //資料表名稱 KEY_ROWID + “=” + rowId, //WHERE語句 null)>0; //WHERE語句的參數

}

}

如果找不到這筆資料id,刪除失敗,回傳0

slide49

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選單,有新增和刪除兩個選項

slide50

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

}

}

slide51

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

}

}

slide52

NOTESDBADAPTER.JAVA

( 查詢單筆條目)

public class NotesDbAdapter {

….

public Cursor get(long rowId) throws SQLException{

Cursor mCursor = db.query(true,DATABASE_TABLE,new String[] {KEY_ROWID,KEY_NOTE,KEY_CREATED},KEY_ROWID+"="+rowId,

null,null,null,null,null);

if(mCursor != null)

mCursor.moveToFirst();

return mCursor;

}

}

查詢單筆資料需要條件

如果指針存在的話,就把指針移到查詢到的第一筆條目上。

slide53

NOTESDBADAPTER.JAVA

( 修改)

public class NotesDbAdapter {

….

public boolean update(long rowId,String note){

ContentValues args = new ContentValues();

args.put(KEY_NOTE, note);

return db.update(DATABASE_TABLE, //資料表名稱 args, //新的內容值 KEY_ROWID+“=”+rowId, //WHERE語句 null)>0;

}

}

update()可以更新資料條目。

沒有修改到條目會回傳false

ad