Model in todo-mvp

概述 透過todo-mvp來說明MVP中的Model todo-mvp 是 Android 官方用來說明 MVP Pattern的範例,參考 https://github.com/googlesamples/android-architecture   todo-mvp 裡的 Model 為TaskRepository,TaskRepository繼承TasksDataSource,而TaskDataSource實際上是一個interface,其中2個內部介面LoadTasksCallback和GetTasksCallback用來作callback使用,內部介面的onTasksLoaded方法用來當取得task成功之後把task傳回呼叫點的用途,而onDataNotAvailable方法用來當取得task失敗後的後續處理。   其餘在TasksDataSource介面的方法都是存取資料的共用方法,只要是Model都要實作這些方法。 TasksDataSource.java public interface TasksDataSource { interface LoadTasksCallback { void onTasksLoaded(List<Task> tasks); void onDataNotAvailable(); } interface GetTaskCallback { void onTaskLoaded(Task task); void onDataNotAvailable();...

如何從 adb 啟動 App 並帶參數

概述 如何從adb啟動App並帶參數 做法 以todo-app為例,使用adb啟動App使用的指令為 adb shell am start -n [PACKAGE-NAME]/[ACTIVITY-NAME] 因此需要先找到PACKAGE-NAME 和 ACTIVITY-NAME 1.找PACKAGE-NAME 先安裝 todo App 到裝置上 1.1輸入以下指令便會列出 App 上所有已安裝的 PACKAGE-NAME adb shell pm list packages -f 若連接多台裝置則使用 -s 指定裝置號碼如下 adb -s DeviceNumber shell pm listpackages -f 如何取得裝置號碼則使用 adb devices 輸入adb shell pm list packages -f 之後回傳的內容可能太長,因此可以在指令的最後加上 > D:\testlog\get_packages.txt 將顯示內容輸出到D:\testlog\get_packages.txt 因此輸入 adb -s DeviceNumber shell pm list packages -f > D:\testlog\get_packages.txt 在d:\testlog\get_packages.txt尋找todo關鍵字,只找到一項如下 package:/data/app/com.example.android.architecture.blueprints.todomvp.mock-1/base.apk=com.example.android.architecture.blueprints.todomvp.mock ...

使用 Stetho 查看實體裝置的資料庫內容

概述 Stetho 為 Facebook 出品的開源 Android 調試工具(官網連結),主要功能有網路抓包,查看資料庫,查看視圖階層等等。本篇主要描述如何使用 Stetho 查看實體裝置的資料庫內容。 步驟 1.Dependencies 在 Module 的 build.gradle 加入以下內容 dependencies { …     implementation 'com.facebook.stetho:stetho:1.5.0' }   2.在 App 的 Source Code 初始化 Stetho 在 App 第一個啟動 Activity 的 onCreate 方法或新增一個類別繼承 Application 的 onCreate方法加入Stetho.initializeWithDefaults(this); public class SingletonApplication extends Application { public void onCreate() { super.onCreate(); Stetho.initializeWithDefaults(this); } }   3.啟動 Stetho 工具 開啟 chrome 瀏覽器並輸入 chrome://inspect 就會開啟 Stetho 工具,Stetho 工具的用途為提供管理所有可調試元件的介面。在紅框內即為連接的實體裝置 4.啟動...

Error Type 3 in Android Studio

描述 在 Android Studio 啟動 App 時出現有關 Error Type 3 的錯誤,可以參考https://stackoverflow.com/questions/20915266/error-type-3-error-activity-class-does-not-exist。 解決 到 File -> Settings -> Build, Execution, Deployment -> Instant Run -> 關閉 Enable Instant Run to hot swap code/resource changes on deploy (default enabled) Orignal From: Error Type 3 in Android Studio...

MVP Pattern in Android

概述 (關於 MVC Pattern in Android 可以參考這篇,本篇是套用 MVP 於 Android 的描述和實作) MVP 將架構分為 3 個部分,分別為 Model(模型層),View(視圖層),Presenter(展示層) View(視圖層): 負責與使用者互動並顯示來自展示層的資料。 Presenter(展示層): 負責處理視圖邏輯和互動邏輯。 Model(模型層): 負責管理業務邏輯,提供網路和資料庫的監聽和修改介面。 設計理念 當 Model 傳輸資料到 Presenter 時,Presenter 會封裝視圖邏輯後再把資料傳遞給 View。和 MVC 最大的不同為 MVP 將視圖邏輯從 Model 移動到 Presenter。而 Model 只保留業務邏輯,從而分離視圖邏輯和業務邏輯,且 View 和 Model 完全分離不會有任何相依關係。 Contract 介面 在 Google 所提供 MVP 範例中可以看到 View 和 Presenter 的介面互相對應,為了描述其相對應的關係,每對 View 和 Presenter 的介面都會放置於其 Contract 介面。e.g., public interface AddEditTaskContract { interface View extends BaseView<Presenter> { void showEmptyTaskError(); void showTasksList(); void setTitle(String title); void...

MVC Pattern in Android

概述 (關於 MVC 在 POSA 的說明可以參考這篇,本篇是套用 MVC 於 Android 的描述和實作) MVC 將架構分為 3 個部分,分別為 Model(模型層),View(視圖層),Controller(控制層) View(視圖層):負責與使用者互動並顯示來自模型層的資料。 Controller(控制層):負責根據來自視圖層的互動訊息,指揮模型層更新資料或指揮視圖層重新載入模型層的資料。 Model(模型層):負責管理視圖邏輯和業務邏輯,提供網路和資料庫的監聽和修改介面。 設計理念 通常視圖邏輯發生修改的機會高於業務邏輯發生修改的機會,因此希望當業務邏輯發生變化時不會影響視圖邏輯。 在 MVC 架構中,View 依賴於 Model,Controller 依賴 View 和 Model,Model 完全獨立不依賴其它兩者。 View 接受使用者輸入事件並轉發給 Controller ,再根據 Controller 的指令顯示 Model 的資料。 Model 提供資料並更新資料,View 的顯示內容就是來自 Model 提供的資料,Controller 也會更新 Model 的資料。 Controller 根據來自 View 的使用者輸入事件,發出指令給 Model 更新資料並通知 View 重新載入 Model 的資料。Controller 負責更新 Model 的資料,根據更新的方式分為主動和被動。因此 MVC 也可分為主動模式(Active)和被動模式(Passive)。 被動(Passive)模式 在被動模式中 Controller 是唯一可以更改 Model 資料的角色,而 View 只能根據 Controller...

Activity 的啟動模式(LaunchMode)紀錄

概述 Activity 的啟動模式主要包含 4 種: Standard(標準模式,預設),SingleTop(棧頂重用),SingleTask(棧內重用), SingleInstance(單例模式)。 Standard 每次啟動都會建立新的 Activity 實體,其它 3 種會根據情況選擇新增或 是重用 Activity 實體。 建立新實體的生命週期為 onCreate -> onStart -> onResume 重用舊實體的生命週期為 onNewIntent -> onResume 如何使用啟動模式A. 在 AndroidManifest.xml 中可以透過設定 launchMode 設定不同的啟動模式 使用 taskAffinity 並加入套件名稱便可以設定不同的栈,預設棧為目前套件名 稱,taskAffinity 只能用於 SingleTop, SingleTask, SingleInstance 1.Standard(標準): 啟動 Activity 的預設模式,當使用 Standard 每次都會產生新的實體。 2.SingleTop(棧頂重用): 當要啟動的 Activity 在棧頂,則重用該實體。若不在棧頂則建立新的實體(建立完成後該實體位於棧頂)。 啟動的生命週期: D: onCreate D: onStart D: onResume 重用的生命週期 D: onPause D: onNewIntent D: onResume 3.SingleTask(棧內重用) A.沒有設定 taskAffinity (情況較為簡單): 1.當要啟動的 Activity 位於棧頂時,重用該實體,不會建立新的實體。...

Activity 生命週期紀錄

概要: 生命週期主要包含 6 種狀態: onCreat, onStart, onResume, onPause, onStop, onDestroy。 各種狀態意義為 onCreate 代表 Activity 的建立 onStart 代表 Activity 的啟動 onResume 代表 Activity 的恢復 onPause 代表 Activity 的暫停 onStop 代表 Activity 的停止 onDestroy 代表 Activity 的銷毀 這些狀態分別互相配對,構成 3 種生命週期,分別為完整的生命週期,可視的生命週期,前台的生命週期。 完整的生命週期包含可視的生命週期,可視的生命週期包含前台的生命週期。 完整的生命週期: Activity 從建立到銷毀的全部過程。最外層生命週期,生命週期發生在 onCreate 到 onDestroy 之間。 可視的生命週期: Activity 從使用者可視到離開使用者視線的過程。生命週期發生在 onStart 到 onStop 之間。注意可視包含該 Activity 被其它元件遮蓋只顯示一部分的情況。 前台的生命週期: Activity 顯示在所有的元件之前並可與使用者互動。生命週期發生在 onResume 到 onPause 之間。 另外還有 4 種特殊的生命週期狀態,各為 onRestart, onSaveInstanceState, on RestoreInstanceState, onNewIntent。 onRestart 的呼叫點為從 onStop 到 onStart 之間,也就是 onStop -> onRestart...

OKHttp 使用注意

1.若想在 Callback 中修改畫面(包含產生 Dialog, Toast 等等),必須使用 runonUiThread 包含要更改的畫面的行為,如下為使用 OKHttp 包裝器的方法宣告, public static void sendPostWithJSONFormat(String URL, Map<String, String> requestParameter, Callback callback) { MediaType JSON = MediaType.parse("application/json; charset=utf-8"); RequestBody requestBody = RequestBody.create(JSON, new JSONObject(requestParameter).toString()); Request request = new Request.Builder().url(URL).post(requestBody).build(); Call call = sOKHttpClient.newCall(request); call.enqueue(callback); } 以下是使用該包裝器方法的範例 OKHttpWrapper.sendPostWithJSONFormat(URL, httpParameter, new Callback() { @Override public void onResponse(Call call, Response response) throws IOException { ...

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Affiliate Network Reviews