1. Wir haben diesmal 2 Gewinnspiele zeitgleich für euch - Gewinne einmal ein UMI Plus E - Beim 2ten könnt ihr ein Nomu S30 gewinnen!
  1. mr.freeze, 09.02.2011 #1
    mr.freeze

    mr.freeze Threadstarter Android-Hilfe.de Mitglied

    Hallo,
    ich lade über urls bilder in eine liste.
    wenn ich dann auf einen listeneintrag klicke soll das dazugehörige
    bild in einer neuen View angezeigt werden.

    ich bekomme leider wegen der "BitmapFactory.decodeStream()"
    folgende fehlermeldung:
    "java.lang.OutOfMemoryError: bitmap size exceeds VM budget"

    gibt es noch eine andere möglichkeit bilder von einer url zu beziehen?
    oder eine möglichkeit den fehler zu beheben oder zu umgehen?

    Gruß
     
  2. computer_freak, 09.02.2011 #2
    computer_freak

    computer_freak Gewerbliches Mitglied

    Du musst einfach nur lesen was da steht, mehr können wir auch nicht.
    Wenn es nicht klappt, zieh ein englischwörterbuch zur Hilfe!
     
  3. mr.freeze, 10.02.2011 #3
    mr.freeze

    mr.freeze Threadstarter Android-Hilfe.de Mitglied

    lol

    das sagt mir, dass du das problem nicht kennst!

    und davon auszugehen, dass man das nicht übersetzen kann,
    find ich naja....
     
  4. rushzero, 10.02.2011 #4
    rushzero

    rushzero Erfahrener Benutzer

    Cached du die Bilder ?

    Oder ziehst du sie erneut vom Netz wenn du auf den List Eintrag drückst
     
  5. mr.freeze, 10.02.2011 #5
    mr.freeze

    mr.freeze Threadstarter Android-Hilfe.de Mitglied

    Ich hole sie wieder.

    Weiß noch nicht genau, ob ich sie in eine Datenbank speichern werde
    oder nicht!
     
  6. rushzero, 10.02.2011 #6
    rushzero

    rushzero Erfahrener Benutzer

    Genau da wird dein Problem sein, Cache sie beim erstenmal auf die SD Karte oder irgendwo hin.

    Und ab dann nimmst sie daraus ist denk ich auch besser wegen Traffic etc
     
  7. miha, 10.02.2011 #7
    miha

    miha Fortgeschrittenes Mitglied

    Meistens ist Speicher schon eigentlich genug vorhanden - nur noch nicht freigegeben.
    Öfter mal System.gc() aufrufen um garbage collection zu erzwingen hilft da (besonders beim Laden von vielen Bildern). Außerdem musst du mal gucken ob du nicht mehr benötigte Bitmaps auch alle korrekt recycle()st ...

    Wenn das nichts hilft und die Bilder wirklich zu groß sind (unwahrscheinlich eigentlich!) dann kannst du beim decode noch in den opts angeben dass kleingesamplet werden soll.
     
  8. v Ralle v, 10.02.2011 #8
    v Ralle v

    v Ralle v Android-Lexikon

  9. miha, 10.02.2011 #9
    miha

    miha Fortgeschrittenes Mitglied

    Äh, das ist doch genau was ich geschrieben habe falls wirklich kein Speicher da ist ...

    Und ich habe gerade zwei Tage mit dem Problem verbracht hunderte Bilder mit bis zu mehreren MB Größe pro Bild zu laden und NIE war nicht genug Speicher da so dass runtergesamplet werden musste! Hab den Code nur noch zu Notlösung drin ...
     
    Zuletzt bearbeitet: 10.02.2011
  10. v Ralle v, 10.02.2011 #10
    v Ralle v

    v Ralle v Android-Lexikon

    Ja richtig, sorry mein Fehler, hatte es nur überflogen. Darauf angespielt hatte ich aber am meisten auf die Zeile:

    options.inTempStorage = new byte[16*1024];
     
  11. mr.freeze, 10.02.2011 #11
    mr.freeze

    mr.freeze Threadstarter Android-Hilfe.de Mitglied

    Hallo,

    ich hatte es geändert von Bitmap zu Drawable und da gibts kein
    recycle().

    Code:
    Drawable photo = Drawable.createFromStream(is, "src name");
    
    mit System.gc() dauert es länger bis das problem auftaucht.
    ist leider noch da!
     
  12. rushzero, 11.02.2011 #12
    rushzero

    rushzero Erfahrener Benutzer

    Dann lad halt nicht des komplette Bild auf einmal mit herrunter.
    //EDIT

    So hatte ich das gemeint.
    Code:
    
    Url url = new URL("http://asdasdasd.de/BILD.jpg");
    InputStream input = url.openStream();
    
    DataInput.. dataI = new DataInput..(input);
    
    FileOutputS.. out  = new openFileOutput("DEIN_CACHE_BILD.png", MODE_APPEND);
    
    byte[] buffer = new byte[50];
    int len = 0;
    
    do{
       len = dataI.read(buffer);
       out.write(buffer);
    }while(len != -1);
    
    
     
    Zuletzt bearbeitet: 11.02.2011

Diese Seite empfehlen