Android;使用"ContentProvider"从网络服务器下载

Android;use "ContentProvider" to download from web server

是否可以使用 ContentProvider 从网络服务器检索(查询)数据?

App中使用的一些数据存储在本地,一些存储在Web服务器中,我想通过ContentProvider封装检索数据和存储数据。

显然检索本地数据很简单,可以通过 ContentProvider.query() method.My 问题在于使用该方法从 web.Clearly 查询我可以开始 AsyncTask 到从 Web 获取数据,但结果 return 从 query 方法中编辑,然后终止 doInBackground() 的 AsyncTask 并且下载的数据从未使用过。

那么如何return下载数据到查询方法呢?

我认为您可以将 AsyncTask 从内容提供程序移动到主应用程序并获取结果,例如

new AsyncTask<String, Integer, Cursor>(){
            @Override
            protected Cursor doInBackground(String... params) {
                return getApplicationContext().getContentResolver().query(...);
            }
        }.execute("");

P.S。 我还在 Google docs 中发现了一些有趣的词: query()、insert()、delete()、update() 和 getType() 方法——从内容提供商进程中的线程池调用,而不是 UI 线程进程.

但是当我尝试在查询方法中调用网络操作时(没有 AsyncTask),它只是抛出 NetworkOperationInMainThread 异常。

Is it possible to use ContentProvider for retrieving(query) data from web server?

没有

So how can I return downloaded data to query method?

您显然无法消除下载延迟,但您可以使用例如 loader 并在数据准备好(下载)后将其插入数据库并调用

getContentResolver().notifyChange(your uri, null);

或者您可以使用 LocalBroadcastManagerEventBus 等其他方法向您的对象发送消息以再次查询 ContentProvider