2015-10-10 147 views
0

我創建的應用程序,應具備離線模式,所以以前下載的數據應該存儲在某個地方,最常見的方式是將數據存儲在數據庫SQLite我真的需要內容提供商在我的應用程序

SQLite數據庫採用的是Android使用Content Provider。我清楚地知道內容提供商的目的是什麼(在不同應用程序之間共享數據),但在我的情況下,應用程序永遠不需要與系統中的其他應用程序共享數據。

Content providerHTTP請求(GET,POST,PUT,DELETE)具有相似的接口。
我的想法是創建一個可以使用這樣getAllLatestNews();首先它會嘗試從互聯網上獲取最新的數據門面類,如果失敗 - 從數據庫中的數據將被使用,如果申請成功,它也將節省檢索到的數據數據庫。這個類將用於分離不同層次的應用程序(不直接從活動請求)。

但現在我有點有點疑惑決定每當我需要Content Provider與否。我可以使用SQLiteOpenHelper類來檢索數據並將其保存到數據庫,甚至可以使用ORM庫來執行此操作。
起初,我想實施REST API Pattern BVirgil Dobjanschi。但是現在我不確定這一點,也許最好爲Robospice創建外觀(在我的情況下是服務中的網絡請求)請求並在那裏做持久化?

請分享您對這個主題的看法,我會很感激任何幫助。

編輯

我問這個問題,因爲我覺得這是不好的做法,使直接從活動的要求,即使他們在服務引擎蓋下發,我要分開我的應用程序的不同層以使其更加靈活和可維護。

+0

如果你確實需要一個ContentProvider,我發現https://github.com/BoD/android-contentprovider-generator非常有幫助。 – eosrei

回答

3

因爲你不打算分享你的數據,我會說實施一個ContentProvider是矯枉過正。

個人即時通訊ORM庫(目前我使用SugarOrm在幾個項目)的超級粉絲,所以我會走這一步。

然後在應用程序啓動,你檢查你是否擁有有效的互聯網連接,並根據您在網上獲取最新信息,或從數據庫中檢索舊的信息。

爲了分離邏輯,我很可能會實現在服務中獲取在線信息,然後將其存儲在數據庫中並廣播到現在可用信息的活動,然後該活動可能會從新更新的數據庫中檢索信息。

+0

謝謝你的回答。欣賞它。 – CROSP

2

內容提供商絕對是在應用程序之間共享數據,沒有這個用途是沒有用的。

如果您想僅在您的應用程序中私下使用這些數據,則可以使用SQLite數據庫。可用的也有其他的目的:

  • 共享偏好
  • 文件

內容提供者具有相似的接口作爲HTTP請求(GET,POST,PUT,DELETE)

我不這麼認爲。這更像是SQL語言。

+0

感謝您的回答,我知道其他可能的數據持久性方式,我對內容提供者很感興趣,因爲我覺得直接從活動中提出請求並不是一種好的做法,我想分開不同層次的應用程序以便使其更加靈活和可維護。 – CROSP

+1

_「直接從活動中提出要求」,_我無法理解這句話的含義。你想在應用程序的活動或其他應用程序的活動中查詢數據庫嗎? –

+0

直接從活動 - 從我的應用程序內部的活動中,活動是MVC模式中的視圖類型,所以我不想在應用程序內部的組件之間緊密耦合。 – CROSP