2011-07-18 11 views
2

私はアンドロイドのappandを持っています。アンドロイドのIntentをブロブのフィールドとしてデータベースに保存したいと思います。私は、私のアプリがすでにすべてを行っているので、TEXT、INTEGERなどの標準データ型をSQLiteに格納して取り出す基本を知っています。私はブロブの格納と取り出しに慣れていません。私は、BLOBが文字列として格納し、そしてIntentに戻って構文解析するよりも、最良の方法であると仮定しています。しかし、それは正しい仮定ではないかもしれません。インテントはパッケージ名、URI、エキストラなどがあります。そのため、パーツを格納するのではなく、全体の意図を格納/取得したいのです。androidでSQLiteデータベースにIntentに格納

答えて

1

は意図してParcelableインタフェースを使用します。

Parcel parcel; 
myIntent.writeToParcel(parcel); 

ContentValues values = new ContentValues(); 
values.put(MyField, parcel.createByteArray()); 
getContentResolver().insert(MyBaseColumn.MyTable.CONTENT_URI, values); 

はそれを得るためのプロセスを逆にします。

テキストが好きな人は、jsonの使用を検討できます。

+5

String intentDescription = intent.toUri(0); //Save the intent string into your database 

後で、テントを復元することができます。 Androidのdocs [link](http://developer.android.com/reference/android/os/Parcel.html)から: "Parcelは汎用のシリアル化メカニズムではありません。このクラス(および対応するParcelable API任意のオブジェクトをParcelに変換する)は、高性能なIPCトランスポートとして設計されているため、Parcelデータを永続ストレージに格納することは適切ではありません。Parcel内のデータの基礎となる実装の変更は、古いデータは読めません。 – Anthony

8

あなたは、単に文字列の方法で意図を保存することができます:これは非常に悪い考えです

String intentDescription = cursor.getString(intentIndex);  
Intent intent = Intent.parseUri(intentDescription, 0); 
+0

残念ながら、これはフラグとすべての追加情報を保存しません。 – JacksOnF1re

+1

@ JacksOnF1reはそうではありません。 [the docs](http://developer.android.com/reference/android/content/Intent.html#toUri(int))をお読みください。 "URIは、アクション、カテゴリ、タイプ、フラグ、パッケージ、コンポーネント、および追加物を記述する追加のフラグメントとともに、基本URIとしてインテントのデータを含んでいます。 – mattgmg1990

+0

Intent.parseUri()のパフォーマンスはあまり良くありません(String.startsWithを何度も呼び出します)。 – sandrstar

関連する問題