目標: XMLデータからデータベースを更新する
プロセス:
- 取引を開始
- 消去テーブルのすべての既存の行
- 解析されたXMLの各主要要素ごとに入れるメインテーブルにローイングしてPKを取得する
- メイン要素の子ごとに入れる前のステップからのFKを提供する2番目のテーブルに記録する
- トランザクションをコミットする
DB 操作に関しては、かなり標準的なものです。問題は、CRUD 操作が 内で行われるのContentProvider
ではなく、 を使用して行われるContentResolver
ため、たとえば挿入は次のようになることですresolver.insert(CONTENT_URI, contentValues)
。ContentResolver API にはトランザクションに関連するものが何もないようで、2 つのテーブルに断続的に挿入しているため、 を使用できません(さらに、トランザクション内でもbulkInsert
を使用したい)。delete
ContentProvider
を使用してカスタマイズしたものをリスナーとして登録することを考えていましたregisterContentObserver
が、メソッドが非表示になっているため、ContentResolver#acquireProvider
適切な参照を取得するにはどうすればよいでしょうか?
運が悪いのでしょうか?
ベストアンサー1
ContentProvider
Google I/O アプリケーションのソース コードでは、のapplyBatch()
メソッドをオーバーライドし、その中でトランザクションを使用していることがわかりました。つまり、 のバッチを作成してContentProviderOperation
から を呼び出しますgetContentResolver().applyBatch(uri_authority, batch)
。
このアプローチを使って、それがどのように機能するか確認するつもりです。他の人も試したことがあるかどうか知りたいです。