Android programming2
Download
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


Activity report xml
加入新ACTIVITY: REPORT.XML

  • Like main.xml


Activity report java
加入新ACTIVITY: REPORT.JAVA



加入新Activity: 修改原Activity

建立Intent實體


加入新Activity: 修改原Activity

setClass(原Activity,新Activity)


加入新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

  • 協助我們:

    • 建立資料表

    • 管理資料表


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

}

}

}

傳入資料庫名稱

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

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

傳入資料庫版本


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


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


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

}

}

}

}

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

重新建立資料表


NOTESDBADAPTER.JAVA

(建構子)

public class NotesDbAdapter {

private Context mCtx = null;

….

public NotesDbAdapter(Context ctx){

this.mCtx = ctx;

}

}


NOTESDBADAPTER.JAVA

(建構子)

public class NotesDbAdapter {

private Context mCtx = null;

….

public NotesDbAdapter(Context ctx){

this.mCtx = ctx;

}

}


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;

}

}


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


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


CRUD 增刪改查

  • Create: 新增

  • Retrieve: 檢索

  • Update: 更新

  • Delete: 刪除


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

}

}


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


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


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


NOTESDBADAPTER.JAVA

( 刪除)

public class NotesDbAdapter {

….

public boolean delete(long rowId){

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

}

}

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


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


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

}

}


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

}

}


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;

}

}

查詢單筆資料需要條件

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


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