1

我正在嘗試構建一個android應用程序,該應用程序向JSON API發出http請求,以創建並填充本地SQLite數據庫,同時通過內容提供程序公開該數據庫。如何在android內容提供者中創建一個http請求?

上下文: 我剛剛開始學習android,所以我首先在沒有內容提供者的情況下使用AsyncTaskLoader的自定義版本工作,在那裏我執行異步請求並直接寫入數據庫。

當我試圖讓它與內容提供者一起工作時,我試圖擺脫CustomAsyncTaskLoader,所以我可以使用CursorLoader。 我在內容提供者的onCreate()方法中將初始http請求作爲異步任務,但是在查找問題幾個小時後,似乎是必須從主UI線程或onPostExecute調用異步任務)方法不會被調用。

所有這些時間尋找一個答案,這導致我猜測,必須有一個更好的方式來做到這一點...

我欣賞提前所有幫助。

回答

0

您缺少的組件是Sync Adapter - 它們用於從內部服務(例如Web服務器)傳輸數據並將其插入到Content Provider中。他們還提供了在集中的Account Authenticator中構建用戶帳戶和處理身份驗證的功能(但如果不需要該功能,您當然可以構建stub Authenticator)。

一旦你建立了你的驗證器/內容提供者/同步適配器,你可以以編程的方式create an account(即使它只是名稱的「後臺同步」),然後run the sync adapter加載你的內容提供者的數據。對於第一次運行,您可能需要run it on demand

Account account; // Account created by your application 
String AUTHORITY; // AUTHORITY associated with your Content Provider 
Bundle settingsBundle = new Bundle(); 
// Set the flags to make it run right now 
settingsBundle.putBoolean(
     ContentResolver.SYNC_EXTRAS_MANUAL, true); 
settingsBundle.putBoolean(
     ContentResolver.SYNC_EXTRAS_EXPEDITED, true); 
// Request the sync, causing the Sync Adapter's onPerformSync to be called 
ContentResolver.requestSync(account, AUTHORITY, settingsBundle); 
相關問題