2010-08-20 99 views
3

我在觀看有關此主題的2010年Google I/O視頻,並且我有幾個問題以確保我理解正確。數據庫和網絡服務模型

Google I/O 2010 - Android REST client applications

請注意,我也有CursorAdapters

的瞭解非常有限眼下我的應用程序只是有一個UI層。我使用一些Google教程創建了一個名爲DbAdapter的對象,以在該數據庫中創建一個小型數據庫和一個表。

我創建了一個類,我調用DataBroker(擴展ContentProvider)來管理從數據庫檢索數據並調用Web服務來更新數據。

方案:

1)假設我想在我的ListActivity顯示項目的列表。我是否正確假設我將在DataBroker中編寫一個函數,該函數爲我的數據庫中的表格創建一個Cursor,該表格包含這些項目,啓動一個服務啓動調用Web服務的線程以獲取其他項目,然後返回Cursor到我的UI線程?這樣做可能會在Web服務完成之前將Cursor返回到我的UI線程,但是,我假設,一旦CursorAdapter有一個Cursor,它會自動顯示對該數據庫表所做的任何更改,是的?

2)現在我有ListView中的項目列表。假設我給用戶一些功能來刪除一個項目。用戶執行此功能。它應該在我的DataBroker中調用一個函數,它更新我的數據庫中對應於該項的行,將狀態列設置爲STATE_DELETING(這將從ListView中刪除行,因爲Cursor有一個不包括此狀態的子句),然後觸發服務會觸發一個線程,觸及我的Web服務,然後在完成後刪除數據庫中的行?另外,假設我有多個Activities,我是否正在尋找每個Activity帶有一個靜態Cursor的列表,在Activity的onCreate中抓住該Cursor,如果該Cursor是null,那麼打我的DataBroker?

+0

我想數據庫命中也需要在服務中。那麼,我有一個服務(命中數據庫)啓動服務(命中網絡服務)? – Andrew 2010-08-20 18:56:02

+0

我想我更傾向於ContentProvider模型。如果有人知道一個代碼片段,我可以真正使用這個教程。 – Andrew 2010-08-20 19:24:13

回答

1

既然沒有人迴應,我會用我做什麼(似乎是工作)

應當指出的是,我已經改名DataBroker迴應。我的ContentProvider現在被其他名稱調用,現在我有一個名爲DataBroker的擴展服務。

1)我不在服務內執行我的光標查詢。我在Activity中調用Cursor,然後調用Service(DataBroker)來查詢Web服務的新數據。如果找到新數據,則DataBroker將廣播由任何Activity偵聽收到的消息,然後Activity將重新查詢遊標。

2)我通過一個Intent將需要刪除的行的ID傳遞給我的Service(DataBroker)。該服務將該ID的狀態列標記爲STATE_DELETING,使用Web服務讓我的服務器知道該行已被刪除,並且如果由服務器確認,則從我的數據庫中刪除該行。另外,在該行被標記爲STATE_DELETING之後,我廣播了一條消息,可以通過任何感興趣的活動來訂閱,讓他們知道我已經這麼做了。這樣Activity可以重新查詢它的Cursor(它不返回STATE_DELETING行)。