2016-06-16 11 views
1

私のアプリケーションで私は画像を保存するデータベースを持っていますが、BitMapで画像を取得しようとすると、ログオフにOutOfMemoryErrorが表示されます。このエラーは表示されません。私のコードがうまく走っている)。OutOfMemoryError:OWMに30836フリーバイトと30KBの82956バイトの割り当てを割り当てられませんでしたか?

デシベルから画像を取得するには、このクラスの試み:

class Abc { 

    ArrayList <ForBitMap> pic; 

    Abc() { 

     pic = new Abc < >(); 

     DataBaseClass objOfDataBaseClass = new DataBaseClass(context); 
     mCursor = objOfDataBaseClass.showData(); 

     if (mCursor.moveToNext()) { 

      do { 

       byte[] mg = null; 

       mg = mCursor.getBlob(mCursor.getColumnIndex("image")); 
       Bitmap bitmap = BitmapFactory.decodeByteArray(mg, 0, mg.length); 

       pic.add(new ForBitMap(bitmap)); 

      } while (mCursor.moveToFirst()); 

     } 
    } 

のArrayListに格納値のため、このクラスの使用(のArrayList PIC;)

class ForBitMap{ 
    Bitmap btmp; 

    ForBitMap(Bitmap btmp){ 
     this.btmp=btmp; 
    } 

} 

logat状況は次のとおりです。

java.lang.OutOfMemoryError: Failed to allocate a 82956 byte allocation with 30836 free bytes and 30KB until OOM 
+0

largeHeapを使用してみてください:

は、このリンクを参照してください。 https://developer.android.com/reference/android/R.styleable.html#AndroidManifestApplication_largeHeap –

+0

largeheep = trueを使用すると@SagarNayak logcatは同じエラーを表示します –

+0

どのようなエラーが発生しましたか? –

答えて

0

データベースにビットマップを格納しないでください。それらをファイルストレージに保存し、ファイルパスをデータベースに保存するだけです。

+0

私にこのトピックに関する適切なリンクを教えてください。 –

+0

確かに、ここにhttps://afterthoughtsoftware.com/posts/Storing-image-URIs-using-Android-SQLite –

+0

の例があります。また、取得時にWeakReferencesを使用する必要がありますビットマップを使用します。メモリリークを防ぎます(非常に頻繁にビットマップによって引き起こされる) –

0

イメージを保存するためにLruCacheを使用してみてください。以前に読み込まれた場合、ビットマップはすべてevemにロードされます。 LruCacheを使用すると、キャッシュメモリ自体にキーで画像が保存されます。 https://developer.android.com/reference/android/util/LruCache.html

関連する問題