2

私はここ数日、データベーストラフコンテンツプロバイダーにアクセスしようとして失敗しました。

データベースを指すために使用されるURIの構文が理解できないと思います。たぶん私はUriのフォーマットに関するAndroid開発者のドキュメントを正しく理解していません。

「testdatabase.db」という名前のデータベース、「table1」という名前のテーブル、およびDbProviderそのサブクラスという名前のクラスがありContentProviderます。データベースは正常に作成され、adbシェルを使用してデータベースにクエリを実行できますが、クライアントからクエリを実行しようとすると、IllegalArgumentException Unknown uri: content://com.test.dbprovider/testdatabase.db

私の場合、誰かがUriの正しい形式を説明してもらえますか?そして、プロバイダーの権限部分の構文は何ですか?たとえば、機関に名前をcom.test.foo付けることはできますが、それでも機能する必要がありますか、それともドットの後の最後の部分をクラス名などにする必要がありますか?

AndroidManifest.xmlまた、ファイルに必要なプロバイダータグを作成しました。

4

2 に答える 2

3

コンテンツ プロバイダーが指定した uri を認識していないため、例外が発生しています。コードを表示していないため、正確に何が間違っているかはわかりません。コンテンツ プロバイダーで UriMatcher のインスタンスを確認します (UriMatcher を使用していますよね? そうでない場合は、ドキュメントを確認してください)。

コンテンツ プロバイダーの uri を少し誤解していると思います。通常、uri でデータベース名を使用したり、公開したりすることはありません (ただし、必要に応じて使用できます)。uri は、データベース内のレコードへのパスであると想定されています。あなたの例では、のようなものを使用できますcontent://com.text.dbprovider/table1。オーソリティは、コンテンツ プロバイダーの完全修飾クラス名である必要があります。コンテンツ プロバイダの URI の詳細については、こちらをご覧ください。

サンプルでNotePad コンテンツ プロバイダーの実装を確認することをお勧めします。

于 2011-09-04T00:27:16.743 に答える