行動裝置程式設計

Size: px
Start display at page:

Download "行動裝置程式設計"

Transcription

1 行動裝置程式設計 佛光大學資訊應用學系

2 課程內容 Android Studio 使用 元件使用 監聽器使用 頁面轉換 ListView JSON Parser SQLite Database

3 Android 介紹 中文俗稱安卓, 是一個基於 Linux 核心的開放原始碼行動作業系統, 由 Google 成立的 Open Handset Alliance(OHA, 開放手機聯盟 ) 持續領導與開發, 主要設計用於觸控螢幕行動裝置如智慧型手機和平板電腦

4 開發環境介紹與安裝 4

5 Android 的開發環境 -Android Studio 開發工具 : 所需套件 :JDK(Java SDK) 7 Android SDK Android Studio 系統需求 : 作業系統 :8/7/Vista/2003 (32 or 64-bit) 記憶體 : 最少需 2 GB, 建議 4 GB 5

6 安裝流程 下載 JDK 下載 Android Studio 投影片第 5~17 頁 安裝 JDK 投影片第 18~37 頁 投影片第 41~45 頁 安裝 Android Studio Android 平台版本 SDK 下載 必要 選擇性 6

7 下載 JDK(1/3) 到 Oracle 網站下載 JDK s/index.html 7 1

8 下載 JDK(2/3) 圈選 Accept License Agreement 後選擇 Windows x86/ x64 版本下載 位元 64 位元

9 下載 JDK(3/3) 點選下載版本後, 可選擇執行 ( 下載完後會直接進行安裝 ) 或儲存 ( 將檔案儲存到電腦中, 使用者要自行點兩下進行安裝 ) 4 9

10 跳出安裝畫面後點選 Next 安裝 JDK (1/5) 10 1

11 安裝 JDK (2/5) 若無須更改路徑則直接按下 Next 11 2

12 等待 JDK 安裝過程 安裝 JDK (3/5) 12

13 安裝 JDK (4/5) 接著安裝 Java 執行環境 (JRE), 若無須更改路徑按下 Next 即可 13 3

14 安裝 JDK (5/5) 等待 JRE 安裝過程, 按 Close 完成安裝 14

15 設定 JAVA_HOME 環境變數 在 windows 系統中我的電腦 ( 本機 ) 圖示上, 按滑鼠右鍵 內容 15

16 設定 JAVA_HOME 環境變數 點選進階系統設定 16

17 設定 JAVA_HOME 環境變數 在 windows 10 系統中, 點選左下角 windows 按鈕 設定, 搜尋上輸入 進階系統, 點選檢視進階系統設定 17

18 設定 JAVA_HOME 環境變數 點選環境變數 18

19 設定 JAVA_HOME 環境變數 點選新增 輸入變數名稱 :JAVA_HOME, 變數值 : C:\Program Files\Java\jdk1.8.0_101 19

20 下載 Android Studio 到 Android Developers 網站下載 20

21 下載 Android Studio 同意條款 21 下載後, 點兩下進行安裝

22 安裝 Android Studio 安裝畫面 22

23 安裝 Android Studio 安裝畫面 23

24 安裝 Android Studio 同意 Android SDK 使用條款 24

25 選擇安裝路徑 安裝 Android Studio 25

26 安裝 Android Studio 建立起動 Android Studio 選單 26

27 安裝 Android Studio 安裝過程 27

28 安裝 Android Studio 安裝完成 28

29 啟動 Android Studio 啟動 Android Studio 時, 會跳出底下視窗 若之前有安裝過, 可匯入之前 Android Studio 的設定, 若無請選擇下面一個 29

30 設定 30

31 選擇安裝方式 31

32 選擇開發環境 UI 樣式 32

33 選擇安裝元件 33

34 下載 / 建立最新 SDK 和模擬器 預設會下載最新版本的 Android SDK 和建立一個最新版本 x86 模擬器 34

35 增加模擬器效能 進入電腦的 BIOS, 將 Virtualization Technology enabled, 若沒有這個表示電腦 CPU 不支援 35

36 安裝 Android Studio 當安裝軟體偵測到電腦支援模擬器硬體加速, 會跳出設定使用硬體加速的最大記憶體量 36

37 檢查設定 37

38 下載元件 38

39 完成 39

40 設定 Android Studio 40

41 設定 Android Studio-- 字型

42 設定 Android Studio-- 程式提示 42

43 下載其他 Android SDK 43

44 下載其他 Android SDK 44

45 下載其他 Android SDK 45

46 下載其他 Android SDK 46

47 下載其他 Android SDK 47

48 課程內容 Android Studio 使用 元件使用 監聽器使用 頁面轉換 ListView JSON Parser SQLite Database

49 目標 BMI

50 Android OS

51 Android system architecture

52 Outline Create empty BMI project Default user interface BMI user interface android:id 存取介面識別符號 strings.xml BMI 程式主體

53 Create new project 手機中顯示應用程式名稱 Java 習慣, 至少兩部分類別名稱 Java naming

54 What we got?

55 src 目錄

56 gen 目錄 R.java: 由 ADT 插件自動生成, 可看成資源字典大全. 根據 res 目錄中的 xml, 影像檔等生成.

57 res 目錄

58 AndroidManifest.xml Android 應用程式的功能清單

59 Outline Create BMI project Default user interface BMI user interface android:id 存取介面識別符號 strings.xml BMI 程式主體

60 在 navigator 視窗雙擊 main.xml What we have now? Hello, BMI 哈囉, BMI Exercise: Replace the android:text string, and run it

61 main.xml (1) 為何使用 main.xml 描述介面? 將程式邏輯與顯示介面分離 Model-View-Controller (MVC)

62 View 階層 View hierarchy

63 main.xml (2) 與上層一樣大 ( 螢幕 ) 屬性 (attribute, property) 值 (value)

64 main.xml 版面配置 click on the layout

65 main.xml (3) 與文字內容貼齊

66 Outline Create empty BMI project Default user interface BMI user interface android:id 存取介面識別符號 strings.xml BMI 程式主體

67 Plan the user interface first Fixed text Input text Output result button

68 How to find what we need? Try the visual tools Web docs

69 API document <android_sdk_path>\docs\index.html

70 API document

71 一個複雜的系統上, 只有 5%~20% 的 API 值得關心 不要嘗試把文件看完

72 使用 GUI 設計使用者介面

73 Exercise: 使用 GUI 加入其他 views EditText 修改 Layout width, Text, Numeric 屬性 Button

74 Outline 視窗 Exercise: 啟動 AVD 觀察結果

75 inputtype 屬性 可取代多種屬性設定, 如 numeric, phone number 等舊屬性 使用 inputtype

76 其他 GUI 工具

77 Outline Create empty BMI project Default user interface BMI user interface android:id 存取介面識別符號 strings.xml BMI 程式主體

78 如何與介面溝通? Fixed text Input text Output result button

79 android:id 屬性 將後續字串解釋成識別符號 <EditText 新增 EditText 介面識別符號 /> 加入 id 類別 / 識別符號

80 xml 描述檔與 R.java main.xml <TextView android:layout_height="wrap_content" android:text=" 身高 " android:layout_width="fill_parent"> </TextView> R.java 資源索引檔 public static final class id { public static final int Button01=0x7f050004; public static final int EditText01=0x7f050001; public static final int EditText02=0x7f050003; public static final int TextView01=0x7f050000; public static final int TextView02=0x7f050002; } ADT 自動從 main.xml 生成 R.java

81 Exercise: 識別符號重新命名 修改後儲存檔案, 觀察 R.java 的變化

82 Outline Create empty BMI project Default user interface BMI user interface android:id 存取介面識別符號 strings.xml BMI 程式主體

83 將字串定義在 strings.xml Idea: 將字串定義抽離程式碼與介面描述檔, 易於後續維護

84 strings.xml

85 將介面所需字串定義在 strings.xml

86 strings.xml R.java R.java 中的變化

87 更改介面描述檔, 使用自訂字串 重點 : 類別 / 識別符號存取字串資源 Exercise: 更改剩下的介面屬性

88 自訂資源檔

89

90

91 Outline Create empty BMI project Default user interface BMI user interface android:id 存取介面識別符號 strings.xml BMI 程式主體

92 內建 (default) 程式主體 package: 定義 name space, 避免程式中的變數名稱, 類別名稱, 方法名稱與其他地方重複 Import: 將程式使用到的 API 對應的 package 導入

93 內建 (default) 程式主體 public: 修飾子, 公開類別. 可由 package 外取用 Activity 類別 : Android 將其應用程式的介面稱為視圖 (View), 負責控制各種動作行為的程式主體 (Controller), 則稱為活動 (Activity).

94 內建 (default) 程式主體 覆載 (override) 父類別 (Activity) 的 oncreate 方法. Bundle 類別物件負責儲存 Activity 上一次關閉時的狀態 super.oncreate() : 呼叫父類別 oncreate 方法 setcontentview: 設定顯示, 索引 R.java 中定義的識別符號 R.layout.main

95 有哪些類別方法可用? 在 package explore 下開啟

96 BMI 程式邏輯 height weight weight/(height*height) calcbmi BMI = 26 onclicklistener: 按下 button 後 Advice: 少吃一點

97 加入 button 物件 findviewbyid: 實體物件與介面物件對應

98 加入 onclicklistener

99 Check document if you want

100 寫 calcbmi callback

101 抓 EditText 輸入的內容 (1) Use findviewbyid How to get the content of EditText? - Check API document!

102

103 抓 EditText 輸入的內容 (2) 善用介面自動功能

104 BMI = 26 Advice: 少吃一點 顯示輸出在 EditText 元件

105 顯示 BMI 建議

106 Outline 加入新的活動 (Activity) 讓 intent 攜帶資料 使用 notification 紀錄 (log) 與除錯 (debug) Activity 的生命週期 (life cycle) 利用 Preference 儲存應用程式資訊

107 再述 Activity Activity 通常負責一個螢幕的內容, 包括介面, 選單, 彈出對話框, 程式動作等 Activity 的切換 : 獨立的 Activity Intent Bmi 相依的 Activity Bmi Intent data Report Report

108 新增 Activity 流程 加入新 Activity 類別 (Java class) 加入新 Activity 介面 (xml) 在 AndroidManifest.xml 加入新 Activity 描述 設定 Activity 切換 ( 使用 startactivity)

109 加入新 Activity 類別 (Java class) 將 BMI 報告以新的 View 顯示

110 新增 Java source code 樣板

111 加入新 Activity 介面 (xml)

112

113 設定顯示介面

114 在 AndroidManifest.xml 加入新 Activity 描述

115 修改後 AndroidManifest.xml 內容

116 設定 Activity 切換 ( 使用 startactivity) 目標 Activity 的類別

117 Exercise: 設定 Activity 顯示名稱

118 Outline 加入新的活動 (Activity) 讓 intent 攜帶資料 使用 notification 紀錄 (log) 與除錯 (debug) Activity 的生命週期 (life cycle) 利用 Preference 儲存應用程式資訊

119 Intent 攜帶資料 Bmi 相依的 Activities Intent data Report 利用 Bundle 物件實體 What s Bundle?

120 將 bundle 加入 intent KEY Value

121 在新的 Activity 接收 intent 資訊

122 設定按鈕事件

123 Outline 加入新的活動 (Activity) 讓 intent 攜帶資料 使用 notification 紀錄 (log) 與除錯 (debug) Activity 的生命週期 (life cycle) 利用 Preference 儲存應用程式資訊

124 Notification bar

125 Notification 及 NotificationManager 過重時使用 notification 呼叫 notification 架構

126 private, public and protected

127 設定 notification 的下拉訊息

128 執行結果

129 Outline 加入新的活動 (Activity) 讓 intent 攜帶資料 使用 notification 紀錄 (log) 與除錯 (debug) Activity 的生命週期 (life cycle) 利用 Preference 儲存應用程式資訊

130 Log.d() Log 除錯訊息

131 Log.e() Log 除錯訊息

132 使用除錯配置 用 debug 模式執行程式 啟動 Debug mode Dalvik Debug Monitor Service (DDMS)

133 LogCat 視窗

134 使用 debug filter 觀察特定 tag

135 虛擬機器提供的 DevTools

136 在實機上除錯 用 USB 連接 Android phone 在 Android phone 按 menu -> settings -> applications -> development 勾選 USB debugging

137 Outline 加入新的活動 (Activity) 讓 intent 攜帶資料 使用 notification 紀錄 (log) 與除錯 (debug) Activity 的生命週期 (life cycle) 利用 Preference 儲存應用程式資訊

138 Android 為多工系統 長按 Home 鍵, 會跳出目前系統中的應用程式

139 Active ( 活動 ) Activity 的狀態 同一個時刻只有一個 Activity 處於 Active Paused ( 暫停 ) 目前運行的螢幕畫面按下來, 退到背景的狀態 Ex. 跳出 toast 或 AlertDialog 時 Stopped ( 停止 ) 此 Activity 離開螢幕, 不再動作 Dead ( 已回收或未啟動 ) 尚未啟動, 或者被手動終止 ( 程式中使用 finish), 或被系統回收 ( 記憶體不足 )

140 系統記憶體不足時的行為 回收與其他 Activity 或 Service / Intent Receiver 無關的 process ( 即優先回收獨立的 Activity) 回收處於 stopped 狀態的 Activity, 最久沒使用的優先回收 回收 service 回收可見的 Activity

141 Activity life cycle

142 利用 Log.v 追蹤 Activity 運作

143 Exercise: life cycle between activities 將 Log.v 加入 Report class, 嘗試觀察從 Bmi 到 Report 兩個 Activity 切換的流程

144 Exercise: life cycle between activities 觀察從 Report 介面按上一頁, 關閉 Report Activity 然後開啟 Bmi Activity 的流程

145 Outline 加入新的活動 (Activity) 讓 intent 攜帶資料 使用 notification 紀錄 (log) 與除錯 (debug) Activity 的生命週期 (life cycle) 利用 Preference 儲存應用程式資訊

146 Motivation 部分應用程式的資訊可以儲存起來, 下一次同樣的應用程式開啟後可以使用 Ex. BMI 程式中, 身高變化較少 儲存方式 : 檔案, 資料庫, 偏好設定 (Preference) 驗證對 Activity life cycle 的知識, 修改 onpause() 方法

147 儲存 Preference Activity 離開螢幕時, 將相關資料儲存 onpause() 使用 SharedPreferences 物件 檔名

148 取出 Preference

149 More about BMI application 發布到 android market 前, BMI 應用程式的問題 語系 度量單位 測試

150 課程內容 Android Studio 使用 元件使用 監聽器使用 頁面轉換 Spinner and ListView JSON Parser SQLite Database

151 前言 Spinner 選單元件 ListView 清單方塊 在程式中變更 Spinner 的顯示項目 151

152 Spinner 選單元件 152

153 Spinner 選單元件 Spinner 元件的屬性設定 getselecteditemposition() 讀取 Spinner 元件的選取項目 onitemselected():spinner 元件的選擇事件 153

154 Spinner 元件的屬性設定 154

155 getselecteditemposition() 讀取 Spinner 元件的選取項目 155

156 範例 6-1 : 使用 Spinner 設計購票程式 156

157 使用 Spinner 設計購票程式 157

158 使用 Spinner 設計購票程式 158

159 使用 Spinner 設計購票程式 159

160 使用 Spinner 設計購票程式 160

161 使用 Spinner 設計購票程式 161

162 使用 Spinner 設計購票程式 162

163 使用 Spinner 設計購票程式 163

164 使用 Spinner 設計購票程式 164

165 使用 Spinner 設計購票程式 165

166 onitemselected():spinner 元件的 選擇事件 166

167 範例運動能量消耗計算機 167

168 運動能量消耗計算機 168

169 運動能量消耗計算機 169

170 運動能量消耗計算機 170

171 運動能量消耗計算機 171

172 運動能量消耗計算機 172

173 運動能量消耗計算機 173

174 運動能量消耗計算機 174

175 運動能量消耗計算機 175

176 運動能量消耗計算機 176

177 ListView 清單方塊 177

178 onitemclick(): ListView 的按一下事件 178

179 範例使用 ListView 建立選單 179

180 使用 ListView 建立選單 180

181 使用 ListView 建立選單 181

182 使用 ListView 建立選單 182

183 使用 ListView 建立選單 183

184 使用 ListView 建立選單 184

185 使用 ListView 建立選單 185

186 使用 ListView 建立選單 186

187 在程式中變更 Spinner 的顯示項目 ArrayAdapter:Spinner 與資料的橋樑 ArrayAdapter(): 建立 ArrayAdapter 物件 setdropdownviewresource(): 設定選單項目的顯示樣式 setadapter(): 將 ArrayAdapter 與 Spinner 綁在一起 187

188 ArrayAdapter:Spinner 與資料的橋樑 188

189 ArrayAdapter(): 建立 ArrayAdapter 物件 189

190 setdropdownviewresource(): 設定選單項目的顯示樣式 190

191 setadapter(): 將 ArrayAdapter 與 Spinner 綁在一起 191

192 範例使用 Spinner 製作飲料訂單 192

193 使用 Spinner 製作飲料訂單 193

194 使用 Spinner 製作飲料訂單 194

195 使用 Spinner 製作飲料訂單 195

196 使用 Spinner 製作飲料訂單 196

197 使用 Spinner 製作飲料訂單 197

198 使用 Spinner 製作飲料訂單 198

199 使用 Spinner 製作飲料訂單 199

200 使用 Spinner 製作飲料訂單 200

201 WebView 應用

202 WebView 元件 - 行動瀏覽器 在 Android 應用程式可以使用 WebView 元件來瀏覽網頁內容, 換句話說, 我們可以使用 WebView 元件建立自己的瀏覽器

203 WebView 元件 - 行動瀏覽器 請啟動 Android Studio 開啟專案 webviewtest, 內含 1 個 Java 類別檔和版面配置檔 activity_main.xml, 其執行結果如右圖所示 :

204 WebView 元件 - 行動瀏覽器 行動瀏覽器的使用介面是定義在 activity_main.xml 版面配置檔, 在刪除 TextView 元件後, 水平編排 1 個 EditText(txtUrl) 和 Button(button,onClick 屬性值是 button_click) 元件, 如下圖所示 :

205 WebView 元件 - 行動瀏覽器 在 MainActivity 活動類別的開頭宣告成員變數 ProgressBar WebView 和 EditText 物件, 如下所示 : public class MainActivity extends ActionBarActivity { } private ProgressBar progressbar; private WebView web; private EditText txturl;...

206 WebView 元件 - 行動瀏覽器 在覆寫 oncreate() 方法載入版面配置後, 依序取得 ProgressBar WebView 和 EditText 物件, 如下所示 protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); progressbar = (ProgressBar) findviewbyid(r.id.progressbar); web = (WebView) findviewbyid(r.id.webview); initwebbrowser(); txturl = (EditText) findviewbyid(r.id.txturl); String strurl = txturl.gettext().tostring(); loadurl(web, strurl); }

207 WebView 元件 - 行動瀏覽器 在 initwebbrowser() 方法初始 WebView 物件和顯示載入網頁的進度對話方塊, 如下所示 : public void initwebbrowser() { // 初始 WebView 元件 web.getsettings().setjavascriptenabled(true); web.setscrollbarstyle(view.scrollbars_inside_overlay); web.setwebviewclient(new WebViewClient(){ public boolean shouldoverrideurlloading( final WebView view, final String url) { loadurl(view, url); return true; } });

208 WebView 元件 - 行動瀏覽器 WebView 物件的 setwebchromeclient() 方法指定使用的 WebChromeClient 客戶端物件, 如下所示 : web.setwebchromeclient(new WebChromeClient(){ public void onprogresschanged(webview view,int progress) { progressbar.setprogress(progress); super.onprogresschanged(view, progress); } }); }

209 WebView 元件 - 行動瀏覽器 自訂方法 loadurl() 可以在 WebView 元件載入網頁, 如下所示 : public void loadurl(final WebView view,final String url){ } progressbar.setprogress(0); view.loadurl(url);

210 WebView 元件 - 行動瀏覽器 Button 元件的事件處理方法是當使用者在 EditText 元件輸入新網址後, 按下按鈕, 就呼叫此方法來載入 URL 網址的網頁, 如下所示 : public void button_click(view view) { String strurl = txturl.gettext().tostring(); loadurl(web, strurl); }

211 WebView 元件 - 行動瀏覽器 在 onkeydown() 方法是處理使用者按下返回鍵 (BACK) 回到上一頁網頁, 如果沒有上一頁網頁, 就顯示對話方塊, 確認是否離開行動瀏覽器, 如下所示 public boolean onkeydown(int keycode, KeyEvent event) { if ((keycode == KeyEvent.KEYCODE_BACK) && web.cangoback()) { web.goback(); return true; } else if(keycode == KeyEvent.KEYCODE_BACK) {

212 WebView 元件 - 行動瀏覽器 AlertDialog.Builder adlg = new AlertDialog.Builder(this); adlg.settitle(" 離開行動瀏覽器 ").setmessage(" 請確認離開行動瀏覽器?").setPositiveButton(" 是 ", new DialogInterface.OnClickListener() public void onclick(dialoginterface dialog, int i) { MainActivity.this.finish(); } }).setnegativebutton(" 否 ", null).show(); return true; } return super.onkeydown(keycode, event); }

213 15-1 WebView 元件 - 行動瀏覽器步驟四 : 在 AndroidManifest.xml 新增存取 Internet 權限 行動瀏覽器因為需要連線 Internet, 所以在 AndroidManifest.xml 檔新增 INTERNET 權限, 如下所示 : <uses-permission android:name="android.permission.internet"/>

214 簡訊處理 - 我的簡訊 行動裝置的主要功能就是對外通訊, 我們除了使用語音通話外, 另一個常用功能是 簡訊 (Short Message Service,SMS), 即手機的文字訊息服務 在這一節筆者準備說明如何在 Android 應用程式收發簡訊, 我們需要使用廣播接收器來取得與顯示簡訊的內容

215 簡訊處理 - 我的簡訊 寄送簡訊的使用介面是定義在 activity_main.xml 版面配置檔, 依序垂直編排 2 個 TextView 和 EditText (txtphoneno txtmessage) 元件, 一個 Button 元件, 如下圖所示 :

216 簡訊處理 - 我的簡訊 在 MainActivity 活動類別的開頭宣告成員變數 EditText 物件 txtphoneno 和 txtmessage, 如下所示 : public class MainActivity extends ActionBarActivity { } private EditText txtphoneno, txtmessage;

217 簡訊處理 - 我的簡訊 在覆寫的 oncreate() 方法載入版面配置後, 可以取得 2 個 EditText 物件, 如下所示 public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); txtphoneno = (EditText) findviewbyid(r.id.txtphoneno); txtmessage = (EditText) findviewbyid(r.id.txtmessage); }

218 簡訊處理 - 我的簡訊 在 Button 元件的事件處理方法寄送簡訊, 首先取得目標簡訊的電話號碼與簡訊內容, 如下所示 : public void button_click(view view) { String phoneno = txtphoneno.gettext().tostring(); String message = txtmessage.gettext().tostring(); if (phoneno.length() > 0 && message.length() > 0) sendsms(phoneno, message); else Toast.makeText(this, " 請確認輸入電話號碼和訊息內容!", Toast.LENGTH_SHORT).show(); }

219 簡訊處理 - 我的簡訊 在自訂 sendsms() 方法寄送簡訊, 為了知道簡訊是否順利送達, 我們註冊 2 個廣播接收器來取得簡訊的傳送結果 首先註冊送出簡訊的廣播接收器, 如下所示 : private void sendsms(string phonenumber, String message) { String SENT = "SMS_SENT"; String DELIVERED = "SMS_DELIVERED"; registerreceiver(new BroadcastReceiver() public void onreceive(context content, Intent intent) { switch (getresultcode()) { case Activity.RESULT_OK: Toast.makeText(getBaseContext(), " 簡訊送出 ", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(getBaseContext(), " 一般錯誤!", Toast.LENGTH_SHORT).show(); break;

220 簡訊處理 - 我的簡訊 case SmsManager.RESULT_ERROR_NO_SERVICE: Toast.makeText(getBaseContext(), " 沒有服務!", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NULL_PDU: Toast.makeText(getBaseContext(), " 空的 PDU", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_RADIO_OFF: Toast.makeText(getBaseContext(), " 沒有訊號 ", Toast.LENGTH_SHORT).show(); break; } } }, new IntentFilter(SENT));

221 簡訊處理 - 我的簡訊 當簡訊送達, 我們再建立一個廣播接收器取得是否送達的結果, 如下所示 : registerreceiver(new BroadcastReceiver() { public void onreceive(context content, Intent intent) { switch (getresultcode()) { case Activity.RESULT_OK: Toast.makeText(getBaseContext(), " 簡訊已經送達!", Toast.LENGTH_SHORT).show(); break; case Activity.RESULT_CANCELED: Toast.makeText(getBaseContext(), " 簡訊沒有送達!", Toast.LENGTH_SHORT).show(); break; } } }, new IntentFilter(DELIVERED));

222 簡訊處理 - 我的簡訊 寄送簡訊首先是建立 PendingIntent 物件, 如下所示 : PendingIntent sentpi = PendingIntent.getBroadcast( this, 0, new Intent(SENT), 0); PendingIntent deliveredpi = PendingIntent.getBroadcast( this, 0, new Intent(DELIVERED), 0); 上述 PendingIntent 物件包裝的 Intent 物件分別送出 SMS_SENT 和 SMS_DELIVERED 廣播

223 簡訊處理 - 我的簡訊 然後取得 SmsManager 物件寄送簡訊, 使用 SmsManager 類別的 getdefault() 方法來取得此物件, 如下所示 : } SmsManager sms = SmsManager.getDefault(); sms.sendtextmessage(phonenumber, null, message, sentpi, deliveredpi);

224 簡訊處理 - 我的簡訊 在 Android 應用程式可以使用廣播接收器接收行動裝置收到簡訊的系統廣播, 換句話說, 我們可以透過它來過濾出我們需要的簡訊, 在第 15-5 節就是使用此方法來找出間諜簡訊 Android Studio 專案 Ch15_2 建立 SMSReceiver.java 類別檔的廣播接收器, 如下所示 : public class SMSReceiver extends BroadcastReceiver { }

225 簡訊處理 - 我的簡訊 我們需要覆寫 onreceive() 方法來建立廣播接收器, 如下所示 public void onreceive(context context, Intent intent) { Bundle bundle = intent.getextras(); SmsMessage[] msgs = null; String str = ""; 如果有, 就取出簡訊中的電話號碼和內容, 簡訊內容是儲存在 PDU 格式的 Object[] 陣列, 如下所示 : if (bundle!= null) { Object[] pdus = (Object[]) bundle.get("pdus"); msgs = new SmsMessage[pdus.length];

226 簡訊處理 - 我的簡訊 } for (int i = 0; i < msgs.length; i++){ msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); str += "SMS from " + msgs[i].getoriginatingaddress(); str += " :"; str += msgs[i].getmessagebody().tostring(); str += "\n"; } Toast.makeText(context, str, Toast.LENGTH_LONG).show(); }

227 簡訊處理 - 我的簡訊 SMSReceiver 廣播接收器需要在 AndroidManifest.xml 檔註冊,Telephony.SMS_RECEIVED 是處理行動裝置收到簡訊的系統廣播, 如下所示 : <receiver android:name=".smsreceiver"> <intent-filter> <action android:name= "android.provider.telephony.sms_received" /> </intent-filter> </receiver>

228 簡訊處理 - 我的簡訊 程式因為需要寄送與接收簡訊, 所以在 AndroidManifest.xml 檔需要新增 2 種權限, 如下所示 : <uses-permission android:name="android.permission.send_sms" /> <uses-permission android:name="android.permission.receive_sms" />

229 寄送電子郵件 - 郵件寄送工具 如同簡訊, 我們也可以建立 Android 應用程式來寄送電子郵件, 不過, 我們並不是直接寄送, 而是透過 Intent 物件呼叫內建郵件工具來寄送電子郵件

230 15-3 寄送電子郵件 - 郵件寄送工具 步驟一 : 開啟和執行 Android Studio 專案 請啟動 Android Studio 開啟專案 Ch15_3, 內含 1 個 Java 類別檔和版面配置檔 activity_main.xml, 其執行結果如下圖所示 :

231 寄送電子郵件 - 郵件寄送工具 寄送郵件的使用介面是定義在 activity_main.xml 版面配置檔, 依序垂直編排 2 個 TextView 和 EditText (txtaddress txtbody) 元件, 一個 Button 元件, 如下圖所示 :

232 寄送電子郵件 - 郵件寄送工具 在 MainActivity 活動類別的開頭宣告成員變數 Button 和 EditText 物件變數, 如下所示 : public class MainActivity extends ActionBarActivity { Button send; EditText address, body; }

233 寄送電子郵件 - 郵件寄送工具 在覆寫 oncreate() 方法載入版面配置後, 取得 2 個 EditText 物件的郵件內容, 如下所示 public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); address = (EditText) findviewbyid(r.id.txtaddress); body = (EditText) findviewbyid(r.id.txtbody); }

234 寄送電子郵件 - 郵件寄送工具 在 Button 元件的事件處理方法啟動內建郵件工具來寄送電子郵件, 首先使用 if 條件檢查是否有輸入電子郵件地址, 然後建立 Intent 物件, 如下所示 : public void button_click(view view) { if (!address.gettext().tostring().trim().equalsignorecase("")) { Intent eintent = new Intent( android.content.intent.action_send); eintent.settype("plain/text"); eintent.putextra(intent.extra_ , new String[]{ address.gettext().tostring()}); eintent.putextra(intent.extra_text, body.gettext()); startactivity(intent.createchooser(eintent, " 寄送電子郵件...")); } else { Toast.makeText(this, " 請輸入電子郵件地址..", Toast.LENGTH_LONG).show(); } }

235 檔案下載與 AsyncTask 抽象類別 在 Android 應用程式下載檔案建議使用執行緒, 我們可以直接繼承 AsyncTask 抽象類別來建立執行緒, 此類別可以建立執行緒來執行背景作業, 換句話說, 我們可以直接繼承 AsyncTask 抽象類別來執行大型檔案的下載

236 檔案下載與 AsyncTask 抽象類別 請啟動 Android Studio 開啟專案 Ch15_4, 內含 2 個 Java 類別檔和版面配置檔 activity_main.xml, 其執行結果如下圖所示 :

237 檔案下載與 AsyncTask 抽象類別 大型檔案下載的使用介面是定義在 activity_main.xml 版面配置檔, 依序編排 2 個 TextView 和 EditText 元件, 最後是 Button 元件, 如下圖所示 :

238 15-4 檔案下載與 AsyncTask 抽象類別 - 大型檔案下載步驟三 :DialogFragment 執行進度對話方塊 -1 DialogFragment 執行進度對話方塊是修改第 節範例,ProgressDialogFragment 類別繼承 DialogFragment 類別, 和宣告成員變數 pdialog, 如下所示 : public class ProgressDialogFragment extends DialogFragment { private ProgressDialog pdialog;... }

239 檔案下載與 AsyncTask 抽象類別 在 newinstance() 類別方法建立 ProgressDialogFragment 物件後, 指定附加的標題文字參數, 如下所示 : static ProgressDialogFragment newinstance(string title) { ProgressDialogFragment dlg = new ProgressDialogFragment(); Bundle args = new Bundle(); args.putstring("title", title); dlg.setarguments(args); return dlg; }

240 檔案下載與 AsyncTask 抽象類別 在覆寫 oncreatedialog() 方法取得標題文字參數 title 後, 建立 ProgressDialog 進度對話方塊物件, 如下所示 public Dialog oncreatedialog(bundle savedinstancestate) { String title = getarguments().getstring("title"); pdialog = new ProgressDialog(getActivity()); pdialog.settitle(title); pdialog.setprogressstyle(progressdialog.style_horizontal); pdialog.setprogress(0); return pdialog; }

241 檔案下載與 AsyncTask 抽象類別 在 updateprogress() 方法呼叫 setprogress() 方法來更新目前進度, 如下所示 : public void updateprogress(integer progress) { } pdialog.setprogress(progress);

242 檔案下載與 AsyncTask 抽象類別 在 MainActivity 活動類別開頭宣告成員變數 ProgressDialogFragment 物件變數, 和檔案名稱字串, 如下所示 : public class MainActivity extends ActionBarActivity { } private ProgressDialogFragment dlg; private String filename;...

243 檔案下載與 AsyncTask 抽象類別 在覆寫 oncreate() 方法載入版面配置後, 取得 Button 物件和建立 Click 事件處理方法, 如下所示 public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); Button btn = (Button)findViewById(R.id.button); 上述程式碼取得 Button 元件 btn 後, 指定傾聽者物件的事件處理方法, 這是使用匿名內層類別建立的傾聽者物件

244 檔案下載與 AsyncTask 抽象類別 實作介面的 onclick() 方法, 如下所示 : btn.setonclicklistener(new View.OnClickListener(){ public void onclick(view v) { EditText txturl = (EditText) findviewbyid(r.id.txturl); String url = txturl.gettext().tostring(); EditText txtfile = (EditText) findviewbyid(r.id.txtfile); filename = txtfile.gettext().tostring(); new AsyncDownloadLargeFile(filename).execute(url); } }); }

245 檔案下載與 AsyncTask 抽象類別 宣告繼承 AsyncTask 的內層類別 AsyncTask 抽象類別可以幫助我們執行背景作業, 這是泛型類別, 如下所示 : class AsyncDownloadLargeFile extends AsyncTask<String, Integer, String> { private String file; public AsyncDownloadLargeFile(String filename) { file = filename; } }

246 檔案下載與 AsyncTask 抽象類別 Step 1: 首先呼叫 onpreexecute() 方法建立和啟動執行緒, 通常我們會在此方法設定作業和顯示進度對話方塊, 如下所示 protected void onpreexecute() { super.onpreexecute(); dlg = ProgressDialogFragment.newInstance(" 下載檔案..."); FragmentManager fm = getsupportfragmentmanager(); dlg.show(fm, "progressdialog"); }

247 檔案下載與 AsyncTask 抽象類別 Step 2:doInBackground(Params...) 方法是在 onpreexecute() 方法之後執行, 我們可以在此方法執行長時間的背景作業, 例如 : 下載大型檔案, 執行期間可以呼叫 publishprogress(progress...) 方法送出目前進度, 然後在 Step 3 的 onprogressupdate() 方法更新 doinbackground() 方法參數 String 後的省略符號..., 表示參數是可變長度的參數列, 第 1 個參數是 urls[0]( 詳見第 A-4-4 節的說明 ), 如下所示 protected String doinbackground(string... urls) { int count; try { URL url = new URL(urls[0]); URLConnection con = url.openconnection(); con.connect(); int len = con.getcontentlength(); Log.d("Ch15_4", " 檔案尺寸 : " + len); InputStream in = new BufferedInputStream(url.openStream()); OutputStream out = new FileOutputStream("/sdcard/" + file);

248 檔案下載與 AsyncTask 抽象類別 下方程式碼是使用 while 迴圈讀取遠端檔案和寫入下載檔案至 SD 卡,publishProgress() 方法更新下載檔案的進度, 如下所示 : byte data[] = new byte[1024]; long total = 0; while ((count = in.read(data))!= -1) { total += count; publishprogress((int)((total*100)/len)); out.write(data, 0, count); } out.flush(); out.close(); in.close(); } catch (Exception e) {} return null; }

249 檔案下載與 AsyncTask 抽象類別 Step 3: 當在 Step 2 呼叫 publishprogress() 方法後, 就會呼叫 onprogressupdate(progress...) 方法, 我們可以在此方法更新進度, 例如 : 更新進度對話方塊顯示的進度, 即呼叫 updateprogress() 方法,Integer 後的省略符號... 表示參數是可變長度的參數列, 第 1 個參數是 progress[0] ( 詳見第 A-4-4 節的說明 ), 如下所示 protected void onprogressupdate(integer... progress) { Log.d("Ch15_4", " 進度 : " + progress[0]); dlg.updateprogress(progress[0]); }

250 檔案下載與 AsyncTask 抽象類別 Step 4:onPostExecute(Result) 是在背景操作執行完畢後呼叫, 我們可以在此步驟隱藏進度對話方塊, 其方法參數並沒有使用, 如下所示 protected void onpostexecute(string unused) { } dlg.dismiss();

251 檔案下載與 AsyncTask 抽象類別 大型檔案下載因為需要連線 Internet 和在外部儲存裝置寫入檔案, 所以在 AndroidManifest.xml 檔需要新增 INTERNET 和 WRITE_EXTERNAL_STORAGE 權限, 如下所示 : <uses-permission android:name="android.permission.internet" /> <uses-permission android:name= "android.permission.write_external_storage"/>

252 簡訊與定位服務 -GPS 間諜簡訊 GPS 間諜簡訊是簡訊與定位服務的應用, 當執行此程式, 只需接到特定暗號的簡訊, 行動裝置就會自動送出簡訊告知目前行動裝置的經緯度座標, 換句話說, 我們可以發送簡訊來得知遺失手機的位置, 或使用簡訊來查詢或追蹤小孩或老人家目前的位置

253 簡訊與定位服務 -GPS 間諜簡訊 GPS 間諜簡訊的使用介面是定義在 activity_main.xml 版面配置檔, 依序編排 1 個 TextView 和 EditText 元件來輸入暗號, 最後是 Button 元件 (onclick 屬性值是 button_click), 如下圖所示 :

254 簡訊與定位服務 -GPS 間諜簡訊 在 MainActivity 活動類別的開頭宣告 public 的 3 個常數, 和 2 個成員變數 SharedPreferences 和 EditText 物件變數, 如下所示 : public class MainActivity extends ActionBarActivity { public static final String PREFERENCES = "SPYSMSPreferences"; public static final String PREFERENCES_CODE = "SPYSMSPreferenceCode"; public static final String PREFERENCES_CODE_DEFAULT = "SPY"; private EditText txtcode; private SharedPreferences prefs;... }

255 簡訊與定位服務 -GPS 間諜簡訊 在覆寫 oncreate() 方法載入版面配置後, 取得 EditText 元件和 SharedPreferences 物件, 如下所示 protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); txtcode = (EditText) findviewbyid(r.id.txtcode); prefs = getsharedpreferences(preferences, MODE_PRIVATE); }

256 簡訊與定位服務 -GPS 間諜簡訊 在 Button 元件的事件處理方法是以使用者偏好設定檔來儲存暗號, 在取得 SharedPreferences.Editor 物件後, 呼叫 putstring() 和 apply() 方法寫入暗號字串至檔案, 如下所示 : public void button_click(view view) { SharedPreferences.Editor prefedit = prefs.edit(); prefedit.putstring(preferences_code, txtcode.gettext().tostring()); prefedit.apply(); Toast.makeText(this, " 成功儲存暗號!", Toast.LENGTH_SHORT).show(); }

257 簡訊與定位服務 -GPS 間諜簡訊 在 Android 應用程式可以使用廣播接收器接收行動裝置收到簡訊的系統廣播, 然後過濾簡訊找出內容為暗號的簡訊, 如果是間諜簡訊, 就取得目前的定位位置, 然後回覆簡訊, 其內容是經緯度座標 Android Studio 專案 Ch15_5 建立 SMSReceiver.java 類別檔的廣播接收器, 如下所示 : public class SMSReceiver extends BroadcastReceiver { }

258 簡訊與定位服務 -GPS 間諜簡訊 onreceive() 方法 讀取簡訊內容來檢查是否是擁有暗號的簡訊, 如下所示 public void onreceive(context context, Intent intent) { if(intent.getaction().equalsignorecase( "android.provider.telephony.sms_received")) { SmsMessage[] messages = getmessagesfromintent(intent); if(messages!= null){ for(int i = 0; i < messages.length; i++){ SmsMessage message = messages[i]; if(matchesspymessage( context,message.getdisplaymessagebody())){ Log.i("Ch15_5", " 收到間諜簡訊!"); sendspysms(context, message.getoriginatingaddress()); break; } } } } }

259 簡訊與定位服務 -GPS 間諜簡訊 getmessagesfromintent() 方法 在自訂的 getmessagesfromintent() 方法可以取得簡訊內容, 參數是 Intent 物件, 傳回值是 SmsMessage[] 陣列, 如下所示 : private SmsMessage[] getmessagesfromintent(intent intent) { SmsMessage retmsgs[] = null; Bundle bundle = intent.getextras(); try { Object pdus[] = (Object[]) bundle.get("pdus"); retmsgs = new SmsMessage[pdus.length]; for (int n = 0; n < pdus.length; n++) { byte[] bytedata = (byte[]) pdus[n]; retmsgs[n] = SmsMessage.createFromPdu(byteData); } } catch (Exception e) { Log.e("Ch15_5", " 取得簡訊內容失敗...", e); } return retmsgs; }

260 簡訊與定位服務 -GPS 間諜簡訊 matchesspymessage() 方法 在自訂 matchesspymessage() 方法的參數是 Context 物件和簡訊內容的 String 字串, 方法讀取使用者偏好設定的暗號來比對是否是一則間諜簡訊, 如下所示 : private boolean matchesspymessage(context context, String message) { SharedPreferences preferences = context.getsharedpreferences( Ch15_5Activity.PREFERENCES, Context.MODE_PRIVATE); String code = preferences.getstring( Ch15_5Activity.PREFERENCES_CODE, Ch15_5Activity.PREFERENCES_CODE_DEFAULT); return code.equalsignorecase(message); }

261 簡訊與定位服務 -GPS 間諜簡訊 sendspysms() 方法 當確認暗號正確是一則間諜簡訊, 我們就呼叫自訂 sendspysms() 方法回覆行動裝置經緯度座標的簡訊, 如下所示 : private void sendspysms(context context, String phonenum) { LocationManager manager; Location current; String best; manager = (LocationManager) context.getsystemservice( Context.LOCATION_SERVICE); 上述程式碼取得定位服務的 LoactionManager 物件後, 建立 Criteria 物件取得最佳的定位提供者, 如下所示 : Criteria criteria = new Criteria(); best = manager.getbestprovider(criteria, true); current = manager.getlastknownlocation(best);

262 簡訊與定位服務 -GPS 間諜簡訊 然後使用 StringBuffer 物件的 append() 方法新增徑度和緯度來建立簡訊內容的 Uri 字串, 如下所示 : if (current!= null) { StringBuffer sb = new StringBuffer(); sb.append("geo:"); sb.append(current.getlatitude()); sb.append(","); sb.append(current.getlongitude()); String message = sb.tostring(); SmsManager sms = SmsManager.getDefault(); sms.sendtextmessage(phonenum, null, message, null, null); Log.i("Ch15_5", " 送出簡訊 :'" + message + "' 至電話 :" + phonenum); } else Log.e("Ch15_5", " 取得 GPS 位置失敗..."); }

263 簡訊與定位服務 -GPS 間諜簡訊 SMSReceiver 廣播接收器需要在 AndroidManifest.xml 檔註冊,Telephony.SMS_RECEIVED 是處理行動裝置收到簡訊的系統廣播, 如下所示 : <receiver android:name=".smsreceiver" android:enabled="true" android:exported="true" > <intent-filter> <action android:name= "android.provider.telephony.sms_received" /> </intent-filter> </receiver>

264 簡訊與定位服務 -GPS 間諜簡訊 程式因為需要寄送與接收簡訊和使用定位服務, 所以在 AndroidManifest.xml 檔需要新增 3 種權限, 如下所示 : <uses-permission android:name="android.permission.send_sms" /> <uses-permission android:name="android.permission.receive_sms" /> <uses-permission android:name= "android.permission.access_fine_location"/>

265 資料庫 儲存資料的結構 分成檔案式與 server 式 透過 SQL 指令 ( 新 / 刪 / 修 / 查 ) 溝通, 需會動態 SQL 指令 欄位 1 欄位 2 欄位 3 資料資料資料 一筆資料 學號姓名性別 小叮噹男 大雄男 管理者要處理 程式要處理

266 建立資料庫 資料庫 資料表 欄位 欄位會有名稱 資料型態 設定等等資料庫 資料表 資料表 欄位 欄位 欄位 欄位 欄位 欄位

267 如果是 SQLite 透過管理介面建立 ( 這裡我們用 firefox 的外掛 SQLite Manager) 透過 adb 內的 sqlite3 指令進行 透過程式建立

268 FireFox 外掛 SQLite Manager 直接點選安裝

269 SQLite Manager 直接建立 / 開啟 SQLite database 有 UI 介面比較好操作

270 SQLite Manager 實體手機可以開啟 USB 連結模式, 透過外接碟模式被開啟 AVD 內的資料庫可以透過 adb pull 拉出, 設定後再用 adb push 存回, 或使用 ddms 來完成

271 Android 連結資料庫 MySQL SQL Server Web Service 遠端資料庫 Internet Intranet Android SQLite 單機資料庫

272 Android vs. SQLite 透過 SQLiteOpenHelper 類別來操作 建立資料庫 ( 建構子 ) 建立資料表 (oncreate 方法 ) 更新資料庫 (onupgrade 方法 ) 從 SQLiteOpenHelper 類別建立物件, 同時配合 SQL 指令來操作資料庫

273 Android vs. SQLite 運作流程 執行建構子 是否有資料庫? 有 檢查版本 無 建立資料庫 進入 oncreate 建立資料表 開啟或更新資料庫 使用資料庫

274 實作 SQLiteOpenHelper 類別

275 Extends SQLiteOpenHelper 產生新 class-mysqlite

276 繼承 SQLIiteOpenHelper

277 尚需要加入建構子

278

279 建構子

280 建立資料庫與資料表

281 透過建構子建立 / 取得資料庫 透過 oncreate 建立資料表 這裡有修正

282 public class MySQLite extends SQLiteOpenHelper { SQLiteDatabase db; // 資料庫物件 public MySQLite(Context context) { super(context, "/sdcard/db2.db", null, 1); db=this.getwritabledatabase(); // 將 db 對應到 /sdcard/db2.db public void oncreate(sqlitedatabase db) { // 建立資料表 String DATABASE_TABLE = "member"; String DATABASE_CREATE_TABLE = "create table " + DATABASE_TABLE + "(_id char(20), name char(10), pwd char(10), age integer, primary key(_id));"; db.execsql(database_create_table); public void onupgrade(sqlitedatabase arg0, int arg1, int arg2) { // TODO 自動產生的方法 Stub } }

283 提示 未來就透過 class MySQLite 來操作資料庫 資料部分則是透過 class MySQLite 內的 db 物件 當然操作資料需要透過 SQL 指令

284 使用資料庫

285 透過 class MySQLite 建立資料

286 public class Main extends Activity { MySQLite dbhelper; // 透過 MySQLite 宣告物件 protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); dbhelper = new MySQLite(this); // 建立 dbhelper 物件 String cmd="insert into member (_id,name,pwd,age) values ('A123',' 小白 ','ccc',12)"; dbhelper.db.execsql(cmd); } }

287 使用 sqlite3 確認

288 建立查詢方法 getdata 查詢資料

289 private void getdata(string sql){ Cursor c=dbhelper.db.rawquery(sql, null); // 透過 Cursor 取得資料 c.movetonext(); // 將指標移動到第一筆資料 String data=""; for(int i=1;i<=c.getcount();i++){ // 取回資料 for(int j=1;j<=c.getcolumncount();j++){ data +=c.getstring(j-1); } data +="\n"; c.movetonext(); } new AlertDialog.Builder(Main.this) // 顯示資料.setTitle("data").setMessage(data).setPositiveButton(" 確認 ",new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int which) { // TODO Auto-generated method stub } }).show(); }

290 呼叫 getdata

291 透過 ListView 顯示資料庫資料

292 使用 ListActivity 改成 ListActivity 刪除

293 建立查詢方法 getdatabylistview

294 private void getdatabylistview(string sql){ Cursor c=dbhelper.db.rawquery(sql, null); // 透過 Cursor 取得資料 c.movetonext(); // 將指標移動到第一筆資料 String[] mstrings = new String[c.getCount()]; for(int i=1;i<=c.getcount();i++){ // 取回資料 mstrings[i-1]=new String(c.getString(1)); c.movetonext(); } // 顯示資料 setlistadapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mStri ngs)); }

295 改呼叫 getdatabylistview

296 result

297 加入 onlistitemclick 偵測點按事件

298 protected void onlistitemclick(listview l, View v, int position, long id) { // TODO 自動產生的方法 Stub super.onlistitemclick(l, v, position, id); Object o=this.getlistadapter().getitem(position); String keyword=o.tostring(); Toast.makeText(Main.this, " 選擇了 :" + keyword, Toast.LENGTH_SHORT).show(); }

299 result

300 透過 ListView 顯示資料 假設是在 Activity 中除了 ListView 之外, 還要放入其他的 View 時, 這時候就需要在 Activity 中加入一個 ListView 物件, 利用這個 ListView 的 setadapter 來連接 Adapter

301 版面中加入 ListView

302 恢復成 Activity

303 修改 getdatabylistview

304 result

305 加入 setonitemclicklistener

306 private void getdatabylistview(string sql){ Cursor c=dbhelper.db.rawquery(sql, null); // 透過 Cursor 取得資料 c.movetonext(); // 將指標移動到第一筆資料 String[] mstrings = new String[c.getCount()]; for(int i=1;i<=c.getcount();i++){ // 取回資料 mstrings[i-1]=new String(c.getString(1)); c.movetonext(); } // 顯示資料 //setlistadapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mString s)); lv.setadapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mString s)); lv.setonitemclicklistener(new public void onitemclick(adapterview<?> arg0, View arg1, int arg2, long arg3) { String keyword=lv.getitematposition(arg2).tostring(); Toast.makeText(Main.this, " 選擇了 :" + keyword, Toast.LENGTH_SHORT).show(); } }); }

307 result

308 加入項目勾選設定 lv.setchoicemode( ListView.CHOICE_MODE_SINGLE );

309 資料異動

310 再改寫顯示方式 新加入 getdatabysimpleadapter 方法 記得改呼叫 getdatabysimpleadapter(cmd_select);

311 private void getdatabysimpleadapter(string sql){ Cursor c=dbhelper.db.rawquery(sql, null); // 透過 Cursor 取得資料 SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.r.layout.simple_list_item_checked, // 版面 c, // 查詢資料 new String[] {"name","_id"}, // 欄位 new int[] { android.r.id.text1 }); // 顯示文字 lv.setchoicemode( ListView.CHOICE_MODE_SINGLE ); // 設定可勾選 lv.setadapter(adapter); lv.setonitemclicklistener(new OnItemClickListener(){ // public void onitemclick(adapterview<?> arg0, View arg1, int arg2,long arg3) { Cursor cursor = (Cursor)lv.getAdapter().getItem(arg2); //arg2 是位置 String keyword =cursor.getstring(cursor.getcolumnindex("_id")); Toast.makeText(Main.this, " 您選擇了 : " + keyword, Toast.LENGTH_LONG).show(); } }); }

312 刪除 取得要刪除的主鍵 (_id) 值 將刪除功能放入選單

313 刪除指令

314 dbhelper.db.delete("member", "_id='" + mid + "'", null); Toast.makeText(Main.this, " 資料刪除完成 ", Toast.LENGTH_LONG).show(); getdatabysimpleadapter("select * from member"); // 重新整理

315 加入 xml 版面 新增

316 加入 Add.java 新增

317 public class Add extends Activity { MySQLite dbhelper; // 透過 MySQLite 宣告物件 dbhelper EditText ed1; // 帳號 EditText ed2; // 姓名 EditText ed3; // 密碼 EditText ed4; // 年齡 Button bt1; // protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.add); dbhelper = new MySQLite(this); // 建立 dbhelper 物件 ed1=(edittext)findviewbyid(r.id.edittext1); ed2=(edittext)findviewbyid(r.id.edittext2); ed3=(edittext)findviewbyid(r.id.edittext3); ed4=(edittext)findviewbyid(r.id.edittext4); bt1=(button)findviewbyid(r.id.button1); bt1.setonclicklistener(new View.OnClickListener() public void onclick(view v) { // 新增程式 String cmd="insert into member (_id,name,pwd,age) values ('" + ed1.gettext() + "','" + ed2.gettext() + "','" + ed3.gettext() + "'," + ed4.gettext() + ")"; dbhelper.db.execsql(cmd); Toast.makeText(Add.this, " 資料新增完成 ", Toast.LENGTH_LONG).show(); Intent it=new Intent(); // 跳回主畫面 it.setclass(add.this, Main.class); startactivity(it); Add.this.finish(); } }); } }

318 加入從 Main 跳至 Add Intent it=new Intent(); // 跳至新增主畫面 it.setclass(main.this, Add.class); startactivity(it);

319 result

320 加入修改畫面 修改

321 Main 加入修改跳頁與傳值 Intent intent = new Intent(Main.this, Update.class); intent.putextra("employee_id",mid); startactivity(intent);

322 先顯示出資料 修改程式

323 public class Update extends Activity { MySQLite dbhelper; // 透過 MySQLite 宣告物件 dbhelper EditText ed1; // 帳號 EditText ed2; // 姓名 EditText ed3; // 密碼 Button bt1; // 新增按紐 String mid; // protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.update); dbhelper = new MySQLite(this); // 建立 dbhelper 物件 ed1=(edittext)findviewbyid(r.id.edittext1); ed2=(edittext)findviewbyid(r.id.edittext2); ed3=(edittext)findviewbyid(r.id.edittext3); bt1=(button)findviewbyid(r.id.button1); mid = this.getintent().getextras().getstring("employee_id"); // 要修改的資料編號 // 將資料顯示出來 String cmd_select="select * from member where _id='" + mid + "';"; Cursor c = dbhelper.db.rawquery(cmd_select, null); // 執行 SQL 指令, 進行資料查詢 if(c.movetonext()){ // 有資料才顯示 ed1.settext(c.getstring(c.getcolumnindex("name"))); // 姓名 ed2.settext(c.getstring(c.getcolumnindex("pwd"))); // 密碼 ed3.settext(c.getstring(c.getcolumnindex("age"))); // 年齡 }else{ Toast.makeText(Update.this, " 找不到任何資料 ", Toast.LENGTH_LONG).show(); return; }

324 加入修改指令 修改程式

325 bt1.setonclicklistener(new View.OnClickListener() public void onclick(view v) { // 新增程式 String cmd="update member set name='" + ed1.gettext() + "',pwd='" + ed2.gettext() + "',age=" + ed3.gettext() + " where _id='" + mid + "'"; dbhelper.db.execsql(cmd); Toast.makeText(Update.this, " 資料修改完成 ", Toast.LENGTH_LONG).show(); Intent it=new Intent(); // 跳回主畫面 it.setclass(update.this, Main.class); startactivity(it); Update.this.finish(); } });

實作SQLiteOpenHelper類別

實作SQLiteOpenHelper類別 SQLiteOpenHelper 類別存取 SQLite 建國科技大學資管系 饒瑞佶 2013/5 V1 Android 連結資料庫 MySQL SQL Server Web Service 遠端資料庫 Internet Intranet Android SQLite 單機資料庫 Android vs. SQLite 透過 SQLiteOpenHelper 類別來操作 建立資料庫 ( 建構子 ) 建立資料表

More information

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new ListView 自訂排版 主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new int[]{r.drawable.dog1, R.drawable.dog2,

More information

Android Robert C.C. Huang Oscar F.Y. Liu Peter C.L. Hsieh 2011/03/21

Android Robert C.C. Huang Oscar F.Y. Liu Peter C.L. Hsieh 2011/03/21 Android Robert C.C. Huang Oscar F.Y. Liu Peter C.L. Hsieh 2011/03/21 Outlines for Today Future Planning Review System Architecture Dev. Tools & Making the First App Project Structure & File Details Application

More information

Microsoft Word - 第1章 Android基本概念.docx

Microsoft Word - 第1章 Android基本概念.docx Android 系 统 下 Java 编 程 详 解 作 者 : 华 清 远 见 第 1 章 Android 基 本 概 念 本 章 简 介 本 章 主 要 介 绍 Android 基 本 概 念 方 面 的 内 容, 包 括 Android 平 台 特 性 Android 系 统 架 构 Android 开 发 框 架 和 Android 开 发 环 境 搭 建 1.1 Android 简 介 Android

More information

建立Android新專案

建立Android新專案 經濟部工業局 Android 智慧型手機程式設計實務應用班 Android WebService 建國科技大學資管系 饒瑞佶 2012/4 WebService 需要 ksoap2-android-assembly-2.5.2-jar-withdependencies.jar 或 ksoap2-android-assembly-2.5.2-jar-withdependencies_timeout1.jar

More information

Android Service

Android Service Android Service- 播放音樂 建國科技大學資管系 饒瑞佶 2013/7 V1 Android Service Service 是跟 Activity 並行 一個音樂播放程式若沒使用 Service, 即使按 home 鍵畫面離開之後, 音樂還是照播 如果再執行一次程式, 新撥放的音樂會跟先前撥放的一起撥, 最後程式就會出錯 執行中的程式完全看不到! 但是, 寫成 Service 就不同了

More information

untitled

untitled JavaEE+Android - 6 1.5-2 JavaEE web MIS OA ERP BOSS Android Android Google Map office HTML CSS,java Android + SQL Sever JavaWeb JavaScript/AJAX jquery Java Oracle SSH SSH EJB+JBOSS Android + 1. 2. IDE

More information

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e Android Studio Debugging 本篇教學除了最基本的中斷點教學之外, 還有條件式中斷的教學 條件式中斷是進階的除錯技巧, 在某些特定情況中, 我們有一個函數可能會被呼叫數次, 但是我們只希望在某種條件成立時才進行中斷, 進而觀察變數的狀態 而條件式中斷這項技巧正是符合這項需求 本教學分兩部分 單步除錯 (Page2~11, 共 10) 條件式中斷點 (Page12~17, 共 6)

More information

投影片 1

投影片 1 資料庫管理程式 ( 補充教材 -Part2) 使用 ADO.NET 連結資料庫 ( 自行撰寫程式碼 以實現新增 刪除 修改等功能 ) Private Sub InsertButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InsertButton.Click ' 宣告相關的 Connection

More information

Microsoft Word zw

Microsoft Word zw 第 1 章 Android 概述 学习目标 : Android Android Android Studio Android Android APK 1.1 1. 智能手机的定义 Smartphone 2. 智能手机的发展 1973 4 3 PC IBM 1994 IBM Simon PDA PDA Zaurus OS 1996 Nokia 9000 Communicator Nokia 9000

More information

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 專題進度 老師 : 趙啟時老師 學生 : 陳建廷 2013/10/13 用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應 程式碼 : package com.example.phone; import java.util.arraylist;

More information

ASP.NET MVC Visual Studio MVC MVC 範例 1-1 建立第一個 MVC 專案 Visual Studio MVC step 01 Visual Studio Web ASP.NET Web (.NET Framework) step 02 C:\M

ASP.NET MVC Visual Studio MVC MVC 範例 1-1 建立第一個 MVC 專案 Visual Studio MVC step 01 Visual Studio Web ASP.NET Web (.NET Framework) step 02 C:\M ASP.NET MVC Visual Studio 2017 1 1-4 MVC MVC 範例 1-1 建立第一個 MVC 專案 Visual Studio MVC step 01 Visual Studio Web ASP.NET Web (.NET Framework) step 02 C:\MvcExamples firstmvc MVC 1-7 ASP.NET MVC 1-9 ASP.NET

More information

Dynamic Layout in Android

Dynamic Layout in Android Dynamic Layout in Android 建國科技大學資管系 饒瑞佶 2013/5 V1 Layout 多半都透過 res/layout/xml 格式設定來達成 Android 是 OOP, 所以可以動態產生 Layout 重點是 Layout 的階層關係 (Hierarchy) 需要處理對應事件 最後一樣用 setcontentview 加入 Layout 一 加入現有 Layout 中

More information

新・解きながら学ぶJava

新・解きながら学ぶJava 481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --

More information

epub83-1

epub83-1 C++Builder 1 C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r 1.1 1.1.1 1-1 1. 1-1 1 2. 1-1 2 A c c e s s P a r a d o x Visual FoxPro 3. / C / S 2 C + + B u i l d e r / C

More information

The golden pins of the PCI card can be oxidized after months or years

The golden pins of the PCI card can be oxidized after months or years Q. 如何在 LabWindows/CVI 編譯 DAQ Card 程式? A: 請參考至下列步驟 : 步驟 1: 安裝驅動程式 1. 安裝 UniDAQ 驅動程式 UniDAQ 驅動程式下載位置 : CD:\NAPDOS\PCI\UniDAQ\DLL\Driver\ ftp://ftp.icpdas.com/pub/cd/iocard/pci/napdos/pci/unidaq/dll/driver/

More information

Database_001

Database_001 作者 : 林致宇日期 :2011/10/26 主要參考來源 : http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applicat ions/ 問題 : 如在存取一個已經建立好的資料庫? 解答 : 有一些應用程式會需要讀取已經建立好的資料庫, 例如一個試題測驗應用程式, 裡面的試題可能已經於電腦上, 使用任何的

More information

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile.. WebSphere Studio Application Developer IBM Portal Toolkit... 1/21 WebSphere Studio Application Developer IBM Portal Toolkit Portlet Doug Phillips (dougep@us.ibm.com),, IBM Developer Technical Support Center

More information

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

建立Android新專案

建立Android新專案 Android 智慧型手機程式設計 程式設計與應用班 Android 資料庫處理 建國科技大學資管系饒瑞佶 2012/4 V1 2012/8 V2 Android 資料庫 -SQLite 資料庫 SQLite 檔案式資料庫 適合嵌入式系統, 不需要額外安裝系統 OPEN SOURCE 資料庫 SQL 指令與一般 DBMS 大同小異, 但有些微差異 SQLite Android 結構 1 資料 結構

More information

目 錄 版 次 變 更 記 錄... 2 原 始 程 式 碼 類 型 之 使 用 手 冊... 3 一 安 裝 軟 體 套 件 事 前 準 備... 3 二 編 譯 流 程 說 明... 25 1

目 錄 版 次 變 更 記 錄... 2 原 始 程 式 碼 類 型 之 使 用 手 冊... 3 一 安 裝 軟 體 套 件 事 前 準 備... 3 二 編 譯 流 程 說 明... 25 1 科 技 部 自 由 軟 體 專 案 原 始 程 式 碼 使 用 手 冊 Source Code Manual of NSC Open Source Project 可 信 賴 的 App 安 全 應 用 框 架 -App 應 用 服 務 可 移 轉 性 驗 證 Trusted App Framework -Transferability Verification on App MOST 102-2218-E-011-012

More information

<4D6963726F736F667420576F7264202D20BBF9D3DA416E64726F6964C6BDCCA8B5C4B5E7D7D3C5C4C2F4CFB5CDB32E646F63>

<4D6963726F736F667420576F7264202D20BBF9D3DA416E64726F6964C6BDCCA8B5C4B5E7D7D3C5C4C2F4CFB5CDB32E646F63> 基 于 Android 平 台 的 电 子 拍 卖 系 统 摘 要 本 电 子 拍 卖 系 统 其 实 就 是 一 个 电 子 商 务 平 台, 只 要 将 该 系 统 部 署 到 互 联 网 上, 客 户 都 可 以 在 该 系 统 上 发 布 想 出 售 的 商 品, 也 可 以 对 拍 卖 中 的 商 品 参 与 竞 价 整 个 过 程 无 须 人 工 干 预, 由 系 统 自 动 完 成 本

More information

Android Fragment

Android Fragment Android Fragment 建國科技大學資管系饒瑞佶 2017/10 V1 Android 3.0 後才支援 Fragment 解決部分 App 適應螢幕大小的問題 它類似於 Activity, 可以像 Activity 可以擁有自己的版面設計, 也和 Activity 一樣有自己的生命週期 ( 具備 oncreate() oncreateview() 與 onpause() 方法 ) LifeCycle

More information

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之

中 文 摘 要 智 慧 型 手 機 由 於 有 強 大 的 功 能, 以 及 優 渥 的 便 利 性, 還 能 與 網 路 保 持 隨 時 的 鏈 結 與 同 步 更 新, 因 此 深 受 廣 大 消 費 者 喜 愛, 當 然, 手 機 遊 戲 也 成 為 現 代 人 不 可 或 缺 的 娛 樂 之 臺 北 市 大 安 高 級 工 業 職 業 學 校 資 訊 科 一 百 零 一 學 年 度 專 題 製 作 報 告 ------ 以 Android 製 作 ------ ----- 連 線 塔 防 遊 戲 ------ Tower defense game using Internet technology 班 級 : 資 訊 三 甲 組 別 : A9 組 組 員 : 葉 冠 麟 (9906129)

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 9 [P.11] : Dev C++ [P.12] : http://c.feis.tw [P.13] [P.14] [P.15] [P.17] [P.23] Dev C++ [P.24] [P.27] [P.34] C / C++ [P.35] 10 C / C++ C C++ C C++ C++ C ( ) C++

More information

國家圖書館典藏電子全文

國家圖書館典藏電子全文 EAI EAI Middleware EAI 3.1 EAI EAI Client/Server Internet,www,Jav a 3.1 EAI Message Brokers -Data Transformation Business Rule XML XML 37 3.1 XML XML XML EAI XML 1. XML XML Java Script VB Script Active

More information

Android Android Android SDK iv

Android Android Android SDK iv Android Market Google Android SDK Apple Google Microsoft b2c b 2010 Internet Android how why iii Android 240... Android Android SDK iv Android Market Google Android SDK Visual C++ Java N-tier J2EE Unix/Linux

More information

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc References (Section 5.2) Hsuan-Tien Lin Deptartment of CSIE, NTU OOP Class, March 15-16, 2010 H.-T. Lin (NTU CSIE) References OOP 03/15-16/2010 0 / 22 Fun Time (1) What happens in memory? 1 i n t i ; 2

More information

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO CHAPTER 使用 Hadoop 打造自己的雲 8 8.3 測試 Hadoop 雲端系統 4 Nodes Hadoop Map Reduce Hadoop WordCount 4 Nodes Hadoop Map/Reduce $HADOOP_HOME /home/ hadoop/hadoop-0.20.2 wordcount echo $ mkdir wordcount $ cd wordcount

More information

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii 前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii C# 7 More Effective C# C# C# C# C# C# Common Language Runtime CLR just-in-time

More information

SyncMail AJAX Manual

SyncMail AJAX Manual HKBN Cloud Mail on Mobile How to setup POP3 and IMAP (Version 1.1) 1 Table of Contents HKBN Cloud Mail 用戶設定 Android 手冊 HKBN Cloud Mail Android Setup... 3 Android 2.X... 3 Android 3.x - 4.X... 6 HKBN Cloud

More information

建立Android新專案

建立Android新專案 Android 智 慧 型 手 機 程 式 設 計 Android WebService 建 國 科 技 大 學 資 管 系 饒 瑞 佶 2012/4 V1 2012/8 V2 2013/5 V3 2014/10 v4 提 醒 這 節 的 內 容 針 對 的 是 MS 的 Web Service 或 是 使 用 SOAP(Simple Object Access Protocol) 標 準 建 立

More information

Microsoft PowerPoint - ch6 [相容模式]

Microsoft PowerPoint - ch6 [相容模式] UiBinder wzyang@asia.edu.tw UiBinder Java GWT UiBinder XML UI i18n (widget) 1 2 UiBinder HelloWidget.ui.xml: UI HelloWidgetBinder HelloWidget.java XML UI Owner class ( Composite ) UI XML UiBinder: Owner

More information

TPM BIOS Infineon TPM Smart TPM Infineon TPM Smart TPM TPM Smart TPM TPM Advanced Mode...8

TPM BIOS Infineon TPM Smart TPM Infineon TPM Smart TPM TPM Smart TPM TPM Advanced Mode...8 Smart TPM Rev. 1001 Smart TPM Ultra TPM Smart TPM TPM...3 1. BIOS... 3 2. Infineon TPM Smart TPM... 4 2.1. Infineon TPM...4 2.2. Smart TPM...4 3. TPM... 5 3.1. Smart TPM TPM...5 3.2. Advanced Mode...8

More information

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6 www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7

More information

Learning Java

Learning Java Java Introduction to Java Programming (Third Edition) Prentice-Hall,Inc. Y.Daniel Liang 2001 Java 2002.2 Java2 2001.10 Java2 Philip Heller & Simon Roberts 1999.4 Java2 2001.3 Java2 21 2002.4 Java UML 2002.10

More information

X6-04_How_do_I_write_a_com_port_communicate_program_of_XPAC_tc

X6-04_How_do_I_write_a_com_port_communicate_program_of_XPAC_tc Author WeiKai Version 1.0.0 Date 2013/4/14 Page 1/11 我如何在 XPAC 上建立一個 COM port 通訊程式 Applies to: Platform OS version XPAC utility version XPAC series All versions (WinCE6) All versions XPAC SDK 提供 XPAC 結合

More information

The Embedded computing platform

The Embedded computing platform 嵌入式系統及實驗 Embedded System and Experiment 詹曉龍 長庚大學電機系 Java 的類別與物件 : 宣告類別 建構子 public class Customer { private String name; private String address; // Customer 類別宣告 // 成員資料 public int age; // 建構子 : 使用參數設定成員資料初始值

More information

The Embedded computing platform

The Embedded computing platform Android User Interfaces Hsiao-Lung Chan, Ph.D. Dept Electrical Engineering Chang Gung University, Taiwan chanhl@maili.cgu.edu.tw Basic control components Text components TextView EditText Button compoents

More information

(Microsoft Word - wes _\246p\246\363\250\317\245\316LED\277O\305\343\245\334\252\254\272A.doc)

(Microsoft Word - wes _\246p\246\363\250\317\245\316LED\277O\305\343\245\334\252\254\272A.doc) 作者 Amber 版本 1.0.0 日期 2012/04/25 頁數 1/7 如何使用 LED 燈顯示狀態? 適用於 : 平台 作業系統版本 XPAC utility 版本 XP-8000 系列 N/A N/A XP-8000-Atom 系列 WES2009 所有版本 N/A: Not applicable to this platform and OS. 注意! 欲變更系統的任何設定之前, 請先關閉

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

AL-M200 Series

AL-M200 Series NPD4754-00 TC ( ) Windows 7 1. [Start ( )] [Control Panel ()] [Network and Internet ( )] 2. [Network and Sharing Center ( )] 3. [Change adapter settings ( )] 4. 3 Windows XP 1. [Start ( )] [Control Panel

More information

3.1 num = 3 ch = 'C' 2

3.1 num = 3 ch = 'C' 2 Java 1 3.1 num = 3 ch = 'C' 2 final 3.1 final : final final double PI=3.1415926; 3 3.2 4 int 3.2 (long int) (int) (short int) (byte) short sum; // sum 5 3.2 Java int long num=32967359818l; C:\java\app3_2.java:6:

More information

Junos Pulse Mobile Security R1 2012, Juniper Networks, Inc.

Junos Pulse Mobile Security R1 2012, Juniper Networks, Inc. Junos Pulse Mobile Security 4.0 2012 6 R1 2012, Juniper Networks, Inc. Junos Pulse Mobile Security Juniper Networks, Inc. 1194 North Mathilda Avenue Sunnyvale, California 94089 408-745-2000 www.juniper.net

More information

CHAPTER VC#

CHAPTER VC# 1. 2. 3. 4. CHAPTER 2-1 2-2 2-3 2-4 VC# 2-5 2-6 2-7 2-8 Visual C# 2008 2-1 Visual C# 0~100 (-32768~+32767) 2 4 VC# (Overflow) 2-1 2-2 2-1 2-1.1 2-1 1 10 10!(1 10) 2-3 Visual C# 2008 10! 32767 short( )

More information

ContextMenu

ContextMenu 作者 : 林致宇 日期 :2012/1/20 問題 : 如何建立 ContextMenu? 解答 : 什麼是 ContextMenu 呢? 下面兩張圖是 ContextMenu 的範例, 紅色框線中的選單即所謂的 ContextMenu, 可以視為 選單列表, 例如在左圖的 ContextMenu 中有兩個選項 : Action 1 與 Action 2, 按下 Action 1 可執行某些動作,

More information

Java 1 Java String Date

Java 1 Java String Date JAVA SCJP Java 1 Java String Date 1Java 01 Java Java 1995 Java Java 21 Java Java 5 1-1 Java Java 1990 12 Patrick Naughton C++ C (Application Programming Interface API Library) Patrick Naughton NeXT Stealth

More information

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, http://debut.cis.nctu.edu.tw/~chi Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, : POSITIVE_INFINITY NEGATIVE_INFINITY

More information

01_Service

01_Service 移动平台应用软件开发 Service 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组 北京大学 二零一七年 什么是 Service 与 Activity 一样, 同属 Android 基本组件 后台运行, 不与用户交互, 没有可视化界面 最常见的 Service 如 : 在后台播放歌曲 后台执行文件的下载 同样需在 AndroidManifest.xml

More information

2 第 章 绪 论 Internet 2.0 使 得 消 费 型 电 子 产 品 用 户 可 以 通 过 多 种 不 同 的 数 据 网 络 访 问 互 联 网 内 容 用 户 可 以 使 用 便 携 式 消 费 型 电 子 设 备, 如 智 能 手 机 触 屏 平 板 电 脑 电 子 书, 甚 至

2 第 章 绪 论 Internet 2.0 使 得 消 费 型 电 子 产 品 用 户 可 以 通 过 多 种 不 同 的 数 据 网 络 访 问 互 联 网 内 容 用 户 可 以 使 用 便 携 式 消 费 型 电 子 设 备, 如 智 能 手 机 触 屏 平 板 电 脑 电 子 书, 甚 至 . Android 是 什 么 第 章 绪 论 2 3 本 章 将 主 要 介 绍 Android 操 作 系 统, 这 些 背 景 知 识 可 以 帮 你 更 好 地 理 解 本 书 的 内 容 你 将 了 解 到, 这 一 平 台 在 如 今 以 便 携 式 消 费 型 电 子 设 备 为 基 础 的 Internet 2.0 环 境 下 是 如 何 大 显 身 手 的 这 里 所 说 的 Internet

More information

建模与图形思考

建模与图形思考 F06_c 观摩 :ContentProvider 基於軟硬整合觀點 架构與 DB 引擎移植方法 ( c) By 高煥堂 4 通用性基类 ContentProvider 基於軟硬整合觀點 的使用范例 刚才的范例里, 我们直接使用 DataPersist 类的接口来与 SQLite 沟通 本节将替 DataPersist 配上 ContentProvider 基类, 让 Client 能透过 ContentProvider

More information

mvc

mvc Build an application Tutor : Michael Pan Application Source codes - - Frameworks Xib files - - Resources - ( ) info.plist - UIKit Framework UIApplication Event status bar, icon... delegation [UIApplication

More information

概述

概述 OPC Version 1.6 build 0910 KOSRDK Knight OPC Server Rapid Development Toolkits Knight Workgroup, eehoo Technology 2002-9 OPC 1...4 2 API...5 2.1...5 2.2...5 2.2.1 KOS_Init...5 2.2.2 KOS_InitB...5 2.2.3

More information

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

res/layout 目录下的 main.xml 源码 : <?xml version=1.0 encoding=utf 8?> <TabHost android:layout_height=fill_parent xml 拓展训练 1- 界面布局 1. 界面布局的重要性做应用程序, 界面是最基本的 Andorid 的界面, 需要写在 res/layout 的 xml 里面, 一般情况下一个 xml 对应一个界面 Android 界面布局有点像写 html( 连注释代码的方式都一样 ), 要先给 Android 定框架, 然后再在框架里面放控件,Android 提供了几种框架,AbsoluteLayout,LinearLayout,

More information

<ADB6ADB1C25EA8FAA6DB2D4D56432E706466>

<ADB6ADB1C25EA8FAA6DB2D4D56432E706466> packages 3-31 PART 3-31 03-03 ASP.NET ASP.N MVC ASP.NET ASP.N MVC 4 ASP.NET ASP.NE MVC Entity Entity Framework Code First 2 TIPS Visual Studio 20NuGetEntity NuGetEntity Framework5.0 CHAPTER 03 59 3-3-1

More information

Android + NFC

Android + NFC Android + NFC 建國科技大學資管系饒瑞佶 2017/3 v1 讀取 Tag UUID Android 2.3.3 (API Level 10) 才有支援完整的 NFC 功能 只要 NFC 相容都讀的到 (NFC 或 Mifare) 建立新專案修改 AndroidManifest.xml 加入 , 如果有 NFC Tag 進入感測範圍, 本 App 也會變成可處理的

More information

JavaIO.PDF

JavaIO.PDF O u t p u t S t ream j a v a. i o. O u t p u t S t r e a m w r i t e () f l u s h () c l o s e () public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException

More information

Eclipse C C++, or

Eclipse C C++,  or Eclipse C C++, Emailctchen@pl.csie.ntut.edu.tw or s1669021@ntut.edu.tw, s2598003@ntut.edu.tw http://pl.csie.ntut.edu.tw/~ctchen, http://www.ntut.edu.tw/~s2598003/ 2004/9/10 (0.02 ) Eclipse http://www.eclipse.org

More information

epub 61-2

epub 61-2 2 Web Dreamweaver UltraDev Dreamweaver 3 We b We b We Dreamweaver UltraDev We b Dreamweaver UltraDev We b We b 2.1 Web We b We b D r e a m w e a v e r J a v a S c r i p t We b We b 2.1.1 Web We b C C +

More information

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class 踩地雷遊戲 高慧君南港高中 開啟專案 MineSweep 任務一 : 產生 30X20 個磚塊編輯 Table 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.util.arraylist; Write a description of class MyWorld

More information

EJB-Programming-3.PDF

EJB-Programming-3.PDF :, JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Value Object Design Pattern J2EE Design Patterns Value Object Value Object Factory J2EE EJB Test Client

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-065Big5 Title : Sun Certified Programmer for the Java 2 Platform, SE 6.0 Version : Demo 1 / 14 1. 35. String #name = "Jane Doe"; 36. int

More information

Microsoft Word - A201103-528_1299547322.doc

Microsoft Word - A201103-528_1299547322.doc 5 10 15 20 25 30 基 于 Android 平 台 的 人 机 交 互 的 研 究 与 实 现 郁 亚 男 ( 北 京 邮 电 大 学 软 件 学 院, 北 京 100876) 摘 要 : 随 着 计 算 的 发 展, 计 算 变 得 越 来 越 自 由, 在 资 源 使 用 方 面 也 越 来 越 灵 活 移 动 终 端 由 于 无 线 通 信 网 络 传 输 速 率 的 提 高,

More information

Microsoft PowerPoint - C_Structure.ppt

Microsoft PowerPoint - C_Structure.ppt 結構與其他資料型態 Janet Huang 5-1 結構的宣告 struct 結構名稱 struct 結構名稱變數 1, 變數 2,, 變數 m; struct 結構名稱 變數 1, 變數 2,, 變數 m; student; student; 5-2 1 結構變數初值的設定 struct 結構名稱 struct 結構名稱變數 = 初值 1, 初值 2,, 初值 n student="janet","1350901",100,95

More information

基于ECO的UML模型驱动的数据库应用开发1.doc

基于ECO的UML模型驱动的数据库应用开发1.doc ECO UML () Object RDBMS Mapping.Net Framework Java C# RAD DataSetOleDbConnection DataGrod RAD Client/Server RAD RAD DataReader["Spell"].ToString() AObj.XXX bug sql UML OR Mapping RAD Lazy load round trip

More information

内 容 提 要 将 JAVA 开 发 环 境 迁 移 到 Linux 系 统 上 是 现 在 很 多 公 司 的 现 实 想 法, 而 在 Linux 上 配 置 JAVA 开 发 环 境 是 步 入 Linux 下 JAVA 程 序 开 发 的 第 一 步, 本 文 图 文 并 茂 地 全 程 指

内 容 提 要 将 JAVA 开 发 环 境 迁 移 到 Linux 系 统 上 是 现 在 很 多 公 司 的 现 实 想 法, 而 在 Linux 上 配 置 JAVA 开 发 环 境 是 步 入 Linux 下 JAVA 程 序 开 发 的 第 一 步, 本 文 图 文 并 茂 地 全 程 指 内 容 提 要 将 JAVA 开 发 环 境 迁 移 到 Linux 系 统 上 是 现 在 很 多 公 司 的 现 实 想 法, 而 在 Linux 上 配 置 JAVA 开 发 环 境 是 步 入 Linux 下 JAVA 程 序 开 发 的 第 一 步, 本 文 图 文 并 茂 地 全 程 指 导 你 搭 建 Linux 平 台 下 的 JAVA 开 发 环 境, 包 括 JDK 以 及 集

More information

Microsoft Word - 02.目錄.doc

Microsoft Word - 02.目錄.doc 目錄 -1- 目錄 序 準備篇 一 使用說明... 0-2 二 標示說明... 0-6 三 注意事項... 0-7 第一類 Android 基礎知識 -UI 設計及語法應用 101. 整存整付計算機... 1-2 102. 電費計算機... 1-8 103. 點餐系統... 1-18 104. 計算 BMI 值... 1-23 105. MENU 功能選單... 1-36 106. 畫廊展示...

More information

untitled

untitled 1 Outline 料 類 說 Tang, Shih-Hsuan 2006/07/26 ~ 2006/09/02 六 PM 7:00 ~ 9:30 聯 ives.net@gmail.com www.csie.ntu.edu.tw/~r93057/aspnet134 度 C# 力 度 C# Web SQL 料 DataGrid DataList 參 ASP.NET 1.0 C# 例 ASP.NET 立

More information

INTRODUCTION TO COM.DOC

INTRODUCTION TO COM.DOC How About COM & ActiveX Control With Visual C++ 6.0 Author: Curtis CHOU mahler@ms16.hinet.net This document can be freely release and distribute without modify. ACTIVEX CONTROLS... 3 ACTIVEX... 3 MFC ACTIVEX

More information

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6: Chapter 15. Suppressed Exception CH14 Finally Block Java SE 7 try-with-resources JVM cleanup try-with-resources JVM cleanup cleanup Java SE 7 Throwable getsuppressed Throwable[] getsuppressed() Suppressed

More information

Microsoft Word - 11.doc

Microsoft Word - 11.doc 除 錯 技 巧 您 將 於 本 章 學 到 以 下 各 項 : 如 何 在 Visual C++ 2010 的 除 錯 工 具 控 制 下 執 行 程 式? 如 何 逐 步 地 執 行 程 式 的 敘 述? 如 何 監 看 或 改 變 程 式 中 的 變 數 值? 如 何 監 看 程 式 中 計 算 式 的 值? 何 謂 Call Stack? 何 謂 診 斷 器 (assertion)? 如 何

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

《大话设计模式》第一章

《大话设计模式》第一章 第 1 章 代 码 无 错 就 是 优? 简 单 工 厂 模 式 1.1 面 试 受 挫 小 菜 今 年 计 算 机 专 业 大 四 了, 学 了 不 少 软 件 开 发 方 面 的 东 西, 也 学 着 编 了 些 小 程 序, 踌 躇 满 志, 一 心 要 找 一 个 好 单 位 当 投 递 了 无 数 份 简 历 后, 终 于 收 到 了 一 个 单 位 的 面 试 通 知, 小 菜 欣 喜

More information

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF Chapter 2 WF 2.1 WF 2.2 2. XAML 2. 2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF WF WF WF WF EDI API WF Visual Studio Designer 1 2.1 WF Windows Workflow Foundation 2 WF 1 WF Domain-Specific

More information

Symantec™ Sygate Enterprise Protection 防护代理安装使用指南

Symantec™ Sygate Enterprise Protection 防护代理安装使用指南 Symantec Sygate Enterprise Protection 防 护 代 理 安 装 使 用 指 南 5.1 版 版 权 信 息 Copyright 2005 Symantec Corporation. 2005 年 Symantec Corporation 版 权 所 有 All rights reserved. 保 留 所 有 权 利 Symantec Symantec 徽 标 Sygate

More information

IBM Rational ClearQuest Client for Eclipse 1/ IBM Rational ClearQuest Client for Ecl

IBM Rational ClearQuest Client for Eclipse   1/ IBM Rational ClearQuest Client for Ecl 1/39 Balaji Krish,, IBM Nam LeIBM 2005 4 15 IBM Rational ClearQuest ClearQuest Eclipse Rational ClearQuest / Eclipse Clien Rational ClearQuest Rational ClearQuest Windows Web Rational ClearQuest Client

More information

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

RunPC2_.doc

RunPC2_.doc PowerBuilder 8 (5) PowerBuilder Client/Server Jaguar Server Jaguar Server Connection Cache Thin Client Internet Connection Pooling EAServer Connection Cache Connection Cache Connection Cache Connection

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information

附录J:Eclipse教程

附录J:Eclipse教程 附 录 J:Eclipse 教 程 By Y.Daniel Liang 该 帮 助 文 档 包 括 以 下 内 容 : Eclipse 入 门 选 择 透 视 图 创 建 项 目 创 建 Java 程 序 编 译 和 运 行 Java 程 序 从 命 令 行 运 行 Java Application 在 Eclipse 中 调 试 提 示 : 在 学 习 完 第 一 章 后 使 用 本 教 程 第

More information

C/C++ - 字符输入输出和字符确认

C/C++ - 字符输入输出和字符确认 C/C++ Table of contents 1. 2. getchar() putchar() 3. (Buffer) 4. 5. 6. 7. 8. 1 2 3 1 // pseudo code 2 read a character 3 while there is more input 4 increment character count 5 if a line has been read,

More information

untitled

untitled ArcGIS Server Web services Web services Application Web services Web Catalog ArcGIS Server Web services 6-2 Web services? Internet (SOAP) :, : Credit card authentication, shopping carts GIS:, locator services,

More information

D C 93 2

D C 93 2 D9223468 3C 93 2 Java Java -- Java UML Java API UML MVC Eclipse API JavadocUML Omendo PSPPersonal Software Programming [6] 56 8 2587 56% Java 1 epaper(2005 ) Java C C (function) C (reusability) eat(chess1,

More information

使用手冊

使用手冊 使用手冊 版權所有 2013 年 Microtek International, Inc. 保留所有權利 商標 Microtek MII MiiNDT ScanWizard Microtek International, Inc. Windows Microsoft Corporation 重要須知 Microtek Microtek Windows Microsoft Windows I49-004528

More information

基于UML建模的管理管理信息系统项目案例导航——VB篇

基于UML建模的管理管理信息系统项目案例导航——VB篇 PowerBuilder 8.0 PowerBuilder 8.0 12 PowerBuilder 8.0 PowerScript PowerBuilder CIP PowerBuilder 8.0 /. 2004 21 ISBN 7-03-014600-X.P.. -,PowerBuilder 8.0 - -.TP311.56 CIP 2004 117494 / / 16 100717 http://www.sciencep.com

More information

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco Windows RTEMS 1 Danilliu MMI TCP/IP 80486 QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos ecos Email www.rtems.com RTEMS ecos RTEMS RTEMS Windows

More information

iziggi

iziggi iziggi 1 1 iziggi-hd 2 iziggi-hd 4 IPEVO iziggi-hd 6 iziggi-hd 8 iziggi-hd 9 Whiteboard App USB 10 iziggi-hd 11 iziggi-hd Live View WiFi 11 12 LED 12 iziggi-hd 13 Apple TV AirPlay 13 14 15 iziggi-hd *

More information

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM CHAPTER 6 SQL SQL SQL 6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM 3. 1986 10 ANSI SQL ANSI X3. 135-1986

More information

RecyclerView and CardVew

RecyclerView and CardVew RecyclerView and CardView 建國科技大學資管系饒瑞佶 2017/10 V1 CardView CardView A CardView is a ViewGroup. Like any other ViewGroup, it can be added to youractivity or Fragment using a layout XML file. To create an

More information

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F 1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET 2.0 2.0.NET Framework.NET Framework 2.0 ( 3).NET Framework 2.0.NET Framework ( System ) o o o o o o Boxing UnBoxing() o

More information

目錄

目錄 資 訊 素 養 線 上 教 材 單 元 五 資 料 庫 概 論 及 Access 5.1 資 料 庫 概 論 5.1.1 為 什 麼 需 要 資 料 庫? 日 常 生 活 裡 我 們 常 常 需 要 記 錄 一 些 事 物, 以 便 有 朝 一 日 所 記 錄 的 事 物 能 夠 派 得 上 用 場 我 們 能 藉 由 記 錄 每 天 的 生 活 開 銷, 就 可 以 在 每 個 月 的 月 底 知

More information

Microsoft Word - 投影片ch11

Microsoft Word - 投影片ch11 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第十一章抽象類別與介面 本章學習目標認識抽象類別學習介面的使用認識多重繼承與介面的延伸 抽象類別與介面 11-2 11.1 抽象類別 抽象類別的目的是要依據它的格式來修改並建立新的類別 11.1.1 定義抽象類別 定義抽象類別的語法如下 : abstract class 類別名稱 { 宣告資料成員 ; // 定義抽象類別

More information

1-1 database columnrow record field 不 DBMS Access Paradox SQL Server Linux MySQL Oracle IBM Informix IBM DB2 Sybase 1-2

1-1 database columnrow record field 不 DBMS Access Paradox SQL Server Linux MySQL Oracle IBM Informix IBM DB2 Sybase 1-2 CHAPTER 1 Understanding Core Database Concepts 1-1 database columnrow record field 不 DBMS Access Paradox SQL Server Linux MySQL Oracle IBM Informix IBM DB2 Sybase 1-2 1 Understanding Core Database Concepts

More information

FETnet - Acer Iconia Tab  (A500 Wi-Fi 版) 平板電腦操作指南

FETnet - Acer Iconia Tab  (A500 Wi-Fi 版) 平板電腦操作指南 Acer Iconia Tab (A500) 平板電腦操作指南 作業系統 :Android 3.0 / 網路頻段 :Wi-Fi 版暫不支援 :Exchange Server 信箱 ( 無法使用 Smart 助手 ) 及手寫輸入法 產品外觀安全保密功能設定數據功能 開關 PIN 碼 ( 暫無資料 ) 更改 PIN 碼 ( 暫無資料 ) 解除 PUK 碼 ( 暫無資料 ) 手機密碼鎖 手動選網 ( 暫無資料

More information

untitled

untitled 4.1AOP AOP Aspect-oriented programming AOP 來說 AOP 令 理 Cross-cutting concerns Aspect Weave 理 Spring AOP 來 AOP 念 4.1.1 理 AOP AOP 見 例 來 例 錄 Logging 錄 便 來 例 行 留 錄 import java.util.logging.*; public class HelloSpeaker

More information

Microsoft PowerPoint - App與微控器整合.pptx

Microsoft PowerPoint - App與微控器整合.pptx 1 2 Outline APP 與微控器整合 2017 中山大學電機實驗營 App 開發環境 -Android Studio 介紹 App 開發 實驗營 App 流程 3 4 Android Studio 介紹 Android Studio 是一個為 Android 平台開發程式的整合式開發環境, 可供開發者免費使用, 並在 Windows OS X Linux 平台上均可執行 專案結構 一個專案下有

More information

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp 01 1.6 Spyder Anaconda Spyder Python Spyder Python Spyder Spyder 1.6.1 Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Spyder Python File

More information