Androidアプリケーション用のコンテンツプロバイダーを作成していますが、UriMatacherを使用してURIを正しく一致させるのに問題があります。
たとえば、一致するURIを追加します(リンクから抜粋)
sURIMatcher.addURI("content://com.example", "people", PEOPLE);
sURIMatcher.addURI("content://com.example", "people/#", PEOPLE_ID);
sURIMatcher.addURI("content://com.example", "people/#/phones", PEOPLE_PHONES);
次に、にアクセスしてみますcontacts/people/1/phones
。成功した一致は、PEOPLE_ID
の代わりにとなることになりPEOPLE_PHONES
ます。
クエリは、最初はこのコードによって生成されます。
Uri uri = Uri.parse("content://com.example/people/#/phones");
ContentUris.appendId(uri.buildUpon(), 1).build();
いくつかのロギングステートメントがスローされると、次のことがわかります。
クエリに渡されたURIはこれを与えます:
content://com.example/people/1#/phones
しかしこれuri.getPath()
を与える:
/people/1
uriの3番目のパス部分は明らかに削除されています。これは、間違ったuriと一致していた理由を説明しています。
Android開発者のWebサイトの例は、これに問題がないことを示しているようです。URIを間違って作成していますか?ただのバグですか?これは意図された機能ですか(したがって、Android開発者の例は悪いものです)?