Soru & Cevap

java.lang.OutOfMemoryError Lütfen Yardım Edin.

22.09.2014 - 02:21

Merhaba Arkadaşlar;

C# İle Yazdığım Restorant Otomasyonuna Entegre Çalışan Bir Android Uygulaması Yaptım.

Uygulama İçerisinde Çokça Görsel Öğe Kullanmaktayım, Örnek Ürün Resimleri, Masa Resimleri Gibi.

Resimleri Kullandığım Ekranlara 6-7 Defa Girip Çıktığımda Şöyle Bir Hata İle Karşılaşıyorum.

FATAL EXCEPTION: main

java.lang.OutOfMemoryError

at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)

....

Görsellerle Anlatmam Gerekirse;

Giriş Ekranı:

Görsel kaldırıldı.

Giriş Ekranı Log:

Görsel kaldırıldı.

Giriş Sonrası Ana Ekran

Görsel kaldırıldı.

Ana Ekran Log:

Görsel kaldırıldı.

Masalar Ekranı:

Görsel kaldırıldı.

Bu Ekranlarda Logla İlgili Herhangi Bir Sıkıntı Olmadığından Görsel Olarak Logu Eklemiyorum.

Ürün Adisyon Ekranı:

Görsel kaldırıldı.

Ekstra Ekranı:

Görsel kaldırıldı.

Ekstra Ekran Log:

Görsel kaldırıldı.

Buraya Kadar Herşey Normal Görüntülenmekte;

Nezamanki Ürün Adisyon Ekranını Kapatıp, Tekrar, Tekrar Açtığımda "6-7" Defa Şöyle bir Durumla Kartşılaşıyorum.

Görsel kaldırıldı.

Hata Log:

 

Görsel kaldırıldı.

Görsel Olarak Bu Şekilde Anlatmamın Sebebi, Android Programlamaya Yeni Başladım ve Derdimi En İyi Bu Şekilde Anlatacağımı Düşündüm.

Ayrıca Log Dosyasını Ek'e Koydum.

Yardımcı Olan Herkese Şimdiden Çok Teşekkür Ederim.

16 Görüntülenme

5 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user burhanaksendir
burhanaksendir
27.09.2014 - 11:18

Displaying Bitmaps Efficiently
Yukardaki bağlantıyı incelerseniz, bu tarz sorunların çözümüne ulaşabilirsiniz. Ayrıca bu adreste örnek kodlar da var. Kolay gelsin.

picture-27154-1409059235.jpg
webing
23.09.2014 - 11:36

Ahmet Bey Merhaba;

Yönlendirmeniz Sayesinde İlgili Methotları Uygulamak İstedim Lakin Bir Sonuç Elde Edemedim. Acemiliğime Verin.

[code]urunGruplari.add(new UrunGruplari(rs.getString("GRUPADI"), UrunResmi , rs.getString("ID")));[/code]

Yukarıdaki ÜrünResmi  Bölümü Bitmap Olarak Tanımlanmış Durumda,

Yeni Oraya Bitmap Değeri Göndermeliyim, Birkaç Denemem Oldu Fakat Sağlıklı Bir Dönüş Alamadım.

Şöyleki;

Görsel kaldırıldı.Yukarıdaki Kod Bloğunu Çalıştırdığımda;

[code]Target must not be null[/code]

Hatasını Aldım;

Görsel kaldırıldı.Yukarıdaki Kod Bloğunu Denediğimde İse;

[code]Method call should not happen from the main thread[/code]

Uyarısı ile karşılaştım.

Sizce Nasıl Bir Yol İzlemeliyim.

Teşekkürler.

/sites/default/files/cevaplar/dosya/2020/file-private_void_urungetir.docx
picture-1372-1408467635.jpg
ahmtbrk
22.09.2014 - 07:20

Res klasöründeki resimleri direk imageView.setImageResource(R.drawable.bos); şeklinde kullansana

url den gelen resimler içinde 

http://square.github.io/picasso/

[code]
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
[/code]

kodu bu şekilde sayfa referansı,url adresi ve eklenecek componenti yazıp bitiriyorsun.

  • Handling ImageView recycling and download cancelation in an adapter.

  • Complex image transformations with minimal memory use.

  • Automatic memory and disk caching.

Gördüğün gibi özellikleri çok harika otomatik cachesi ve minimum ram kullanımı var bir kere download eder  sadece her türlü performanslı.

Bir böyle dene bakalım

picture-27154-1409059235.jpg
webing
22.09.2014 - 07:13

Cevabınız İçin Çok Teşekkür Ederim Sayın Ahmet Burak Demirkoparan;

Sabit Zemin vb Resimleri Res Klasöründen, Masa, Yemek Resimlerini URL Den Çekiyorum.

Kullandığım Kod İse;

Url Resimler İçin;

[code]Bitmap UrunResmi = Bitmap.createScaledBitmap(BitmapFactory.decodeStream((InputStream)new URL("http://"+ medyaIp + ":"+ medyaPort +"/UrunGrup_Gorsel/"+ rs.getString("RESIM")).getContent()),100, 120, true);urunGruplari.add(new UrunGruplari(rs.getString("GRUPADI"), UrunResmi , rs.getString("ID")));[/code]

Res Klasöründeki Resimler İçin;

[code]Bitmap bos = BitmapFactory.decodeResource(this.getResources(), R.drawable.bos);[/code]

Bu Sorunu Nasıl Çözebilirim Acaba! 2 Gündür Beyinimi Yıprattım Resmen.

Teşekkürler.

picture-1372-1408467635.jpg
ahmtbrk
22.09.2014 - 04:45

Soru gayet açıklayıcı ama bu resimleri nerede saklıyorsun ramde mi cacheliyorsun bellek taşması oluyor ve resimler gördüğüm kadarıyla kaliteli.

Disk cache yapmanı önereceğim resimleri urlden mi çekiyorsun yoksa binary tipinde kodları var bitmap'a mı dönüştürüyorsun birazcık daha açabilir misin?

Url'den çekiyorsan picasso isimli library'i öneririm cachelemeyide kendisi yapıyor.

veya Jake Wharton isimli şahsın kodladığı DiskLruCache isimli mekanizmayı kullanarak diskte saklayabilirsin resimleri.