2011-12-21 4 views
0

私はこの問題ではかなりクレイジー取得しています:私は、私は私のアプリを開き、OutOfMemoryErrorが発生するたびに取得していますエンコードされたbyte64イメージが原因のOutOfMemoryErrorアンドロイド

。ある時点では、サーバーからイメージをロードしますが、Base64文字列でエンコードされます。

decodedString = Base64.decode(imagen_codificada); 

Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, 
          decodedString.length); 

しかし、私は毎回、のろわOOMEを取得しています:

私はWhay

は基本的です。

はこれにしようとした場合:128

BitmapFactory.Options options=new BitmapFactory.Options(); 
         options.inSampleSize = 8; 

でも設定オプションを、何が

は、画像を体系化文字列のサイズを小さくする方法はあります...クレイジーですが、それでもクラッシュ何とかそれを解読する前に?それはアプリをwithing他の多くのもののために、デスクトップ環境で使われているので、私は、私は、エラーログを添付して...、画像を真っ直ぐに

を操作することはできません。

12-21 10:36:27.032: E/dalvikvm-heap(5508): 10119168-byte external allocation too large for this process. 12-21 10:36:27.032: E/dalvikvm(5508): Out of memory: Heap Size=5823KB, Allocated=4351KB, Bitmap Size=720KB, Limit=13692KB 12-21 10:36:27.032: E/dalvikvm(5508): Trim info: Footprint=6343KB, Allowed Footprint=6343KB, Trimmed=520KB 12-21 10:36:27.032: E/GraphicsJNI(5508): VM won't let us allocate 10119168 bytes 12-21 10:36:27.192: E/AndroidRuntime(5508): FATAL EXCEPTION: main 12-21 10:36:27.192: E/AndroidRuntime(5508): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

EDIT:これで解決しよう:

decodedString = Base64.decode(imagen_codificada); 
        System.gc(); 
        BitmapFactory.Options options=new BitmapFactory.Options(); 
        options.inSampleSize = 8; 
        InputStream input = new ByteArrayInputStream(decodedString); 
        Bitmap decodedByte = BitmapFactory.decodeStream(input, null, 
          options); 
        menu.setNombreApellido(decodedByte); 

ありがとうございます!

+0

これはあなたの役に立つかもしれません:http://stackoverflow.com/questions/477572/android-strange-out-of-memory-issue/823966#823966 –

+0

こんにちは、試してコメントします。ありがとう! – vicks630

+0

もう一度、私はオプションでdecodeByteArrayを使用できないことを知ったので、Byte配列をストリームに変更する必要があります。私は試してみるつもりです。 – vicks630

答えて

1

これを試す
byte[] decodedString = (byte[])Base64.decode(imagen_codificada);
これは、uビット配列を直接返します。今すぐあなたの写真を縮小するには
BitmapFactory.Options options=new BitmapFactory.Options(); // options.inSampleSize = 8; を使用することができます。

+0

問題は次のように解決されます。 decodedString = Base64.decode(imagen_codificada); \t \t \t \t \t System.gc(); \t \t \t \t \t BitmapFactory.Options options = new BitmapFactory.Options(); \t \t \t \t \t options.inSampleSize = 8; \t \t \t \t \t InputStream input = new ByteArrayInputStream(decodedString); \t \t \tビットマップdecodedByte = BitmapFactory.decodeStream(入力、ヌル、 \t \t \t \t \tオプション)。 \t \t \t menu.setNombreApellido(decodedByte); – vicks630

+0

@ vicks630:あなたはinputStreamを呼び出していますか? –

関連する問題