2011-07-26 8 views
15

私は最近、自分のAndroidタブレットアプリケーションでORMLiteにデータベースを切り換えました。これまでのところとても良い、ほとんどのものがリファクタリング/コード化されています。もともとデータベースにBLOBとして格納されていたものに問題があります。ORMLiteと画像はBLOBとしてAndroidに保存されました

@DatabaseField 
String picture; 
:最高の私が持っている、それが今の文字列でなければならない言うことができる、

byte[] imageBytes; 

が、私はORMLiteでそれを使用することができるとは思わない。私の元のデータモデルでは、このように見えました

しかし、今、私は私がデータベースにしてからデータをフェリーするために、このようなコードを使用していた...などバイト、として、それらのデータビットを読み書きする方法として混乱しています:

... 
//Set the clients image to what was captured... 
Bitmap resized2= android.graphics.Bitmap.createScaledBitmap(thumbnail, thumbnail.getWidth()/2, thumbnail.getHeight()/2, true); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
resized2.compress(Bitmap.CompressFormat.PNG, 100, baos); //bm is the bitmap object 
byte[] b = baos.toByteArray(); 

mClient.setImageBytes(b); 
myImage.setImageBitmap(resized2); 
//do save to the database of the image to the blob whose column is picture 
ContentValues initialValues = new ContentValues(); 
initialValues.put("picture", mClient.getImageBytes()); 
String [] strArray = {""+sid}; 
long n = dbAdapter.updateRecordsInDB("clients", initialValues, "_id=?", strArray);  

だから今のthats私はイメージをどのように保存したのですか、私はsuではありませんORMLiteにBLOBSがなく、文字列を使用する必要がある場合はどうすればいいですか?

は完全を期すために、これは私は、画像を表示する方法を次のとおりです。

if(mClient.getImageBytes().length <= 1) //no image in database, thats fine use generic 
    myImage.setImageResource(R.drawable.sillo); // create a sillouhtette face icon here... 
else 
    myImage.setImageBitmap((BitmapFactory.decodeByteArray(mClient.getImageBytes(),0, (mClient.getImageBytes()).length))); 

それでは、私はデータベースの内と外、これらの画像を取得するためにしなければならない、との正しい文字列のフィールドタイプで行います「ブロブ」?

答えて

22

実際にはbyte[]個のフィールドをORMLiteに格納することができます。 manual about byte arrays

バイト配列(byte [])は、SQL型VARBINARYとして保持されます。これは、オブジェクトをバイト配列として直列化するDataType.SERIALIZABLE型とは異なります。

注:下位互換性のため、byte []型のフィールドは、dataTypeフィールドを使用してDataType.BYTE_ARRAYまたはDataType.SERIALIZABLEとして指定する必要があり、自動検出されません。

@DatabaseField(dataType = DataType.BYTE_ARRAY) 
byte[] imageBytes; 

トリックはORMLiteが自動的にあるため、いくつかの後方互換性のbyte[]の種類を検出していないということです。

ので、バイトを使用するように[]あなたは、データの型を指定する必要があります。問題。

+1

何らかの理由でレンダスクリプトDataTypeを取得しましたが、名前を完全に修飾しなければならず、すべてが良好でした。ありがとう! – Codejoy

+1

+1いいね...私の時間を保存しました –

+0

@Gray ormlite_config.txtファイルにbyte []を設定する方法は分かっていますか? coz私はこのファイルをthtファイルに追加しました。#--field-start-- fieldName = image1 #--field-end--しかし、dbにファイルを保存しようとすると実行時例外が発生します。 –

関連する問題