5

私は Microsoft .NET 開発 (主に C#) で長年の経験があり、Android と Java の速度を上げるために取り組んできました。ここまでで、いくつかの画面と機能するコンテンツ プロバイダーを備えた小さなアプリケーションを作成しました。

コンテンツ プロバイダーを開発するために私が見たすべての例は、通常、1 つのテーブルで動作するため、これが規則であるという印象を受けました。

他のテーブル用にさらにいくつかのコンテンツ プロバイダーを作成し、それらをテストしようとしたときに「不明な URI」IllegalArgumentException に遭遇しました。コンテンツ プロバイダーの 1 つによって例外がスローされていますが、呼び出すつもりだったプロバイダーではありません。

私のアプリケーションは、AndroidManifest.xml ファイルの最初のコンテンツ プロバイダを使用しているようです。このため、アプリケーション全体に対して 1 つのコンテンツ プロバイダのみを使用する必要があるかどうか疑問に思っています。

Android アプリケーションで複数のテーブルを操作するためのベスト プラクティスや例はありますか? テーブルごとに 1 つのコンテンツ プロバイダーを使用する必要がありますか?それとも、アプリケーション全体に対して 1 つのみにする必要がありますか? 前者の場合、URI を適切なプロバイダーに解決するにはどうすればよいですか? 後者の場合、コンテンツ プロバイダーのコードが switch ステートメントで汚染されないようにするにはどうすればよいですか?

4

2 に答える 2

10

まあ、私は CommonsWare に反対しなければなりません。IllegalStateExceptions やその他の問題を回避したい場合は、Cursorloader を使用する必要があります。彼らはあなたのために複数のことを処理し、カーソルが滑らかであることを確認します. したがって、コンテンツ プロバイダーが必要です。最初の質問はまだ答えられていません。番号またはコンテンツ プロバイダーとテーブルのベスト プラクティスがわかりません。ただし、.query メソッド内で URI ID を確認します。uri id に特定の値があるかどうかをテストし、そのようにクエリを作成できます。

于 2012-01-05T17:50:31.400 に答える
2

Android アプリケーションの 99% は、コンテンツ プロバイダーを必要としません。

コンテンツ プロバイダには、プロセス間通信という 1 つの主な用途があります。あなたがいる場合:

  • 他の開発者があなたのコンテンツ プロバイダーにアクセスすることを期待する、または
  • コンテンツ プロバイダを必要とする場所で Android に統合されている (例: クイック検索ボックスの検索候補)

コンテンツ プロバイダを実装するのは、そのときだけです。

そうしないと、アプリケーションにオーバーヘッドが追加され、コードの保守が難しくなるだけです。

したがって、あなたのアプリケーションがコンテンツ プロバイダーを必要としない 99% のアプリケーションの 1 つである場合は、所有しているプロバイダーを削除して、別の手段 (例: SQLiteDatabase) でコンテンツにアクセスします。

于 2010-05-29T20:05:18.467 に答える