私はAndroidアプリで問題を戦っています。私はAndroidのドキュメント(Andriod Pro 2)のAndroidドキュメントを読んでいて、私が手に入れることができるほとんどすべての例を見てきましたが、実装する方法を理解できませんでした。ファイル(イメージ、バイナリデータ)コンテンツプロバイダによって公開されるSqliteテーブルのレコード。_dataフィールドを使用してAndroidデータベース(カスタムコンテンツプロバイダ)にファイルを格納する - v1.6
- は私のプロバイダで
ContentProvider
を実装:ここは、私は(メモ帳のサンプルアプリとほぼ同様)やっていることです。それはすべてCRUD操作のために働く。内部的には、コンテンツプロバイダに
- 私はレコードを挿入し、ウリを取得し、私は
- text型の
_data
列を追加した - コールopenOutputStreamを実装
SQLiteOpenHelper
(かなり標準のもの)をバック使用し、データの書き込みを開始
これは正確にアンドロイドに応じてプロ2 book.Hereはコードのその部分の抜粋です:
Uri uri = getContentResolver().insert(MyAuthority.CONTENT_URI, contentValues);
OutputStream s = getContentResolver().openOutputStream(uri);
富栄tは私がエラーを取得する以下:
11-29 01:07:30.717: は(1490)/ System.errのをWARN: java.io.FileNotFoundException: コンテンツのプロバイダによってサポートされません ファイル://myproviderauthority/podcasts/1
私は何をする必要がありますか?私は、Android documentationを読んで、彼らは非常にあいまいです:
実際 コンテンツ含まれている必要があり クライアントにデータを公開するフィールド:URI文字列を。
1)だから、TEXTなるようにフィールドタイプの必要性をしたり、特殊なcontent: URI string
データ型がありますか?
2)私はURIを持っていません。挿入後にURIを取得し、レコードのそのフィールドを更新する必要がありますか?
レコードはまた、その ファイルをデバイス上の 正確なファイルパスを示しています「_data」という名前の別の フィールドを、持っている必要があります。このフィールドは、 というクライアントではなく、 ContentResolverによって読み取られることを意図しています。
3)このフィールドのタイプはどのようにする必要がありますか?テキスト?
クライアントは ContentResolverを呼び出します。項目のURI を保持するユーザー向きのフィールド のopenInputStream()。
4)これはまったくのゴミです!フィールド上でContentResolver.openInputStream()
に電話するにはどうすればいいですか?レコードでこれを呼び出し、Uriを渡すことしかできません。
ありがとうございました。私があなたを助けてくれることを願っています。私はまた、これらのSOの質問(thisとthis)を見直して、彼らが役に立たなかった。
ところで私はAPI(バージョン1.6)のレベル4に対してビルドしています。
ありがとうございました!私が推測したように、それはopenFileを実装することを伴いますが、それはどこにも言及されていませんでした。とにかくファイルに格納することが含まれていることがわかりましたので、カスタムプロバイダでファイルを公開しないため、私には利点がありません。 – Aliostad