2012-03-15 15 views
7

内部ストレージを使用するコンテンツプロバイダを作成しようとしています。しかし、私がオンラインで見るすべての例では、sqliteしか使用していません。コンテンツプロバイダSQLiteを使用しない例

誰かが内部チュートリアルや内部ストレージを使用してコンテンツプロバイダを作成する例を教えていただけますか?

+0

「内部ストレージを使用するコンテンツプロバイダ」の意味を定義してください.SQLiteは一般に内部ストレージを使用しますが、SQLiteは不要です。 – CommonsWare

+0

@CommonsWare Android開発ページによれば、共有環境設定、内部ストレージ、外部ストレージ、SQLiteデータベース、およびネットワーク接続の5つの方法があります。コンテンツプロバイダに内部ストレージオプションを使用させます。 – drum

+0

その意味での内部ストレージとは、アプリケーションのプライベートデータ領域にファイルを格納することを意味します。実際にはAPIではありません。 SQLiteデータベースがアプリケーションのプライベートデータ領域にファイルとして保存されている場合、SQLiteを使用する方が一般的に簡単で高速になります。 –

答えて

4

openTypedAssetFile()などのコンテンツプロバイダのファイルメソッドを使用して、データをファイルに格納できます。これは、カーソルの代わりにAssetFileDescriptor(プロセス間で有効なファイルハンドル)を返します。

全体として、質問は非常に答えにくいです。コンテンツプロバイダは、データリポジトリとクライアントとの間の「インタフェース」です。このドキュメントでは、a)SQLite以外のリポジトリについてはあまり言及していません。なぜなら、a)コンテンツプロバイダモデルがリレーショナルデータベースの行に沿って編成されていること、b)コンテンツプロバイダの実装がすべて異なっているからです。

あなたの正確な要件を知る前に、私はもっと助言を与えることを躊躇します。あなたはすぐに理由が分からないかもしれませんが、SQLiteのメリットがあるかもしれません。あなたも正しいかもしれません:SQLiteは解決策ではありませんが、より多くの情報があれば私はいくつかのアイデアを提案できます。

+0

あなたの言っていることが分かります。また、ContentProviderの関数の中にはデータベースが必要なものもあります。私はquery()関数を実装する方法を見つけようとしてきましたが、Cursorオブジェクトを返さなければならないので、この場合はSQLiteが必要です。 – drum

+1

[this](https://android.googlesource.com/platform/packages/providers/WebSearchProvider/+/8637dd8dc1b255052b2615430bfb4603fa8711f7/src/com/android/websearch/SuggestionProvider.java)はSQLIteを使用しません。ソースデータはJSONArrayです。 AbstractCursorを拡張するCursorを作成する方法を学ぶことができます。 – Yeung

0

まあ私はあなたがやっていることを知っているかもしれないかもしれないかもしれない画像、ムービー、または内部ストレージなど。

InternalStorageを使用してデータのバイトを格納できます。あなたがバイトを持っている場合は、単に行うことができます。

String FILENAME = "hello_file"; 
String string = "hello world!"; 

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
fos.write(string.getBytes()); 
fos.close(); 

はそれを得るために:

File file = ... 
    OutputStream out = null; 
    try { 
    out = new BufferedOutputStream(new FileOutputStream(file)); 
    ... 
    finally { 
    if (out != null) { 
     out.close(); 
    } 
    } 

すべてのソースはthisthisで発見されています。私はそれを試したことがないので、これ以上あなたを助けることはできません。

+0

はい、私はすでにこのページを見てください。ただし、これはコンテンツプロバイダーでは機能しません。 – drum

1

ContentProviderを使用し、SQLiteデータベースを使用しないAndroid SDKサンプルには、FileProvider.javaという例があります。

関連する問題