providers パラメーターの後続の ContentProviderOperation 項目が前の項目の結果に依存する同じ操作で、android.content.ContentResolver.applyBatch() メソッドを使用してマスター レコードと詳細レコードをコンテンツ プロバイダーに保存できるかどうか疑問に思っていました。
私が抱えている問題は、 ContentProviderOperation.newInsert(Uri) メソッドが呼び出された時点で実際の Uri が不明であり、Uri が不変であることです。
私が思いついたものを以下に示します。
マスター URI: content://com.foobar.masterdetail/master
詳細 URI: content://com.foobar.masterdetail/master/#/detail
ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
operations.add(ContentProviderOperation.newInsert(intent.getData())
.withValue(Master.NAME, "")
.withValue(Master.VALUE, "")
.build());
operations.add(ContentProviderOperation.newInsert(intent.getData()
.buildUpon()
.appendPath("#") /* ACTUAL VALUE NOT KNOWN UNTIL MASTER ROW IS SAVED */
.appendPath("detail")
.build())
.withValue(Detail.MASTER_ID, /* WHAT GOES HERE? */)
.withValue(Detail.NAME, "")
.withValue(Detail.VALUE, "")
.build());
ContentProviderResult[] results = this.getContentResolver().applyBatch(MasterDetail.AUTHORITY, operations);
for (ContentProviderResult result : results) {
Uri test = result.uri;
}
私のコンテンツ プロバイダーでは、操作をトランザクションにラップするために applyBatch() メソッドをオーバーライドしています。
これは可能ですか、それとももっと良い方法がありますか?
ありがとう。