Android: ContentResolver 使用時の SQLite トランザクション 質問する

Android: ContentResolver 使用時の SQLite トランザクション 質問する

目標: XMLデータからデータベースを更新する

プロセス:

  • 取引を開始
  • 消去テーブルのすべての既存の行
  • 解析されたXMLの各主要要素ごとに入れるメインテーブルにローイングしてPKを取得する
  • メイン要素の子ごとに入れる前のステップからのFKを提供する2番目のテーブルに記録する
  • トランザクションをコミットする

DB 操作に関しては、かなり標準的なものです。問題は、CRUD 操作が 内で行われるのContentProviderではなく、 を使用して行われるContentResolverため、たとえば挿入は次のようになることですresolver.insert(CONTENT_URI, contentValues)。ContentResolver API にはトランザクションに関連するものが何もないようで、2 つのテーブルに断続的に挿入しているため、 を使用できません(さらに、トランザクション内でもbulkInsertを使用したい)。delete

ContentProviderを使用してカスタマイズしたものをリスナーとして登録することを考えていましたregisterContentObserverが、メソッドが非表示になっているため、ContentResolver#acquireProvider適切な参照を取得するにはどうすればよいでしょうか?

運が悪いのでしょうか?

ベストアンサー1

ContentProviderGoogle I/O アプリケーションのソース コードでは、のapplyBatch()メソッドをオーバーライドし、その中でトランザクションを使用していることがわかりました。つまり、 のバッチを作成してContentProviderOperationから を呼び出しますgetContentResolver().applyBatch(uri_authority, batch)

このアプローチを使って、それがどのように機能するか確認するつもりです。他の人も試したことがあるかどうか知りたいです。

おすすめ記事