如何在android内容提供者中创建一个http请求?

问题描述:

我正在尝试构建一个android应用程序,该应用程序向JSON API发出http请求,以创建并填充本地SQLite数据库,同时通过内容提供程序公开该数据库。如何在android内容提供者中创建一个http请求?

上下文: 我刚刚开始学习android,所以我首先在没有内容提供者的情况下使用AsyncTaskLoader的自定义版本工作,在那里我执行异步请求并直接写入数据库。

当我试图让它与内容提供者一起工作时,我试图摆脱CustomAsyncTaskLoader,所以我可以使用CursorLoader。 我在内容提供者的onCreate()方法中将初始http请求作为异步任务,但是在查找问题几个小时后,似乎是必须从主UI线程或onPostExecute调用异步任务)方法不会被调用。

所有这些时间寻找一个答案,这导致我猜测,必须有一个更好的方式来做到这一点...

我欣赏提前所有帮助。

您缺少的组件是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);