2012-11-27 13 views
0

我正在開發一個Android應用程序,它將數據存儲在通常的SQLite數據庫中。我必須將這些數據公開給我的應用程序組件(活動和服務)和其他應用程序。如何在Android設備內創建類似於RESTful WS的內容供內部使用?

不幸的是,我必須在將這些數據存儲到數據庫之前以及在將它們從數據庫中取出之前,以各種複雜的方式操作這些數據。我必須編輯字段,彙總來自多行或多列的數據等等。那就是:我必須執行典型的「數據按摩」,您可以通過許多商業智能程序和許多統計數據看到它們。

這意味着SQLite數據庫本身太少。我必須做更多簡單的CRUD。

內容提供者似乎也不是解決方案。典型的Android CP實現了一個非常類似於標準CRUD的接口,更重要的是,它總是返回一個遊標(按行和列組織的臨時數據表)。它看起來非常像我的需要的一個非常薄的SQL數據庫環繞。我仍然需要了解,如果我可以將自己的業務邏輯放入CP本身,如果我可以擴展外部CP接口(「content:...」),並且天氣可以被認爲是一種良好實踐。

也許一個Android服務可能會給我一種公開我的功能的方法,並且我可以將SQLite DB(或包含SQLIte DB的CP)嵌入到服務中。我仍然需要了解這是否可以成爲解決方案,以及如何。

我真正需要的,最有可能的,將是這樣一個RESTful Web服務:

  1. 一個SQL數據庫,用於存儲隨後的數據,在我的「東西」
  2. 的接口,接受核心動詞(GET,PUT,POST等)和單數/複數名稱(「People」,「John Doe」等),並返回「objects」(不一定是「Java Objects」),它們可能只是JSON或XML文件/流)。這個界面將是外部唯一可見的圖層。
  3. 在中間,我的「業務邏輯」用於操作數據。

當然,標準CP與RESTful WS非常相似,很可能是我的問題的解決方案。我不明白CP是否足夠靈活。例如,它看起來像一個CP只能接受類似於GET/PUT的請求,並且它不能返回除遊標以外的任何其他內容。

那麼,你會用什麼來將非只是CRUD功能和非 - 基本數據公開給你的應用程序的各個部分(活動)和其他應用程序?

只是一個Android內容提供者(可能會在CP本身內部編寫業務邏輯)?

一個包裝SQL DB(或者甚至包裝CP)的Android服務?

還有什麼?

哪個架構最優雅(「可保存」,「可擴展」,「靈活」,「打開」)?爲此,是否存在任何「最佳實踐」?

您的意見/建議?

回答

0

我不確定自己對自己的問題有很好的理解,但似乎您對交換SQLite,CP,Service有點困惑。通常他們並肩工作。 也許它可以幫助你:Google I/O 2010 - Android REST client applications

我的建議/假設:

- >活動的POJO - >服務(HadlerThread(單獨的線程+的MessageQueue)) - > CP

+0

我很困惑這些話題...... :-) – AlexBottoni

0

OK,它看起來像 「正確」 的架構中使用在我的情況下是由barn.gumbl建議的:

  1. 在最內層,使用SQLite數據庫來存儲數據。
  2. 用Android內容提供程序包裝SQLite數據庫。這並不是必需的,但它幾乎總是一個好主意,因爲使代碼更加模塊化。您可以從您的應用程序的任何活動/服務以及任何允許這樣做的外部應用程序訪問CP。
  3. 使用Android服務包裝CP。這是揭示/發佈不同於或者比簡單CRUD更豐富的API的唯一方式(就像我的情況那樣)。它也是返回與遊標對象不同的東西的唯一方法。

使用這種分層架構:

  1. 您可以對數據進行任何操作,而讀取或寫入
  2. 可以公開不是由CP所允許的一個更豐富的API
  3. 你可以返回任何類型的對象

所有這一切仍然尊重Android體系結構(CP和服務都可以由其他應用程序使用,如果有權限的話)。

在我的情況下,我需要以相當奇怪的方式聚合數據並返回一個代表聚合的對象。這是一個無法用純粹的CP完成的事情。