Out of memory auf einem byte-Zuordnung (Bitmap als String an den webservice mit soap)
Bin eine bitmap
, so dass ich hochladen will-ein webserivceas string und wollen ermittelt werden, die string.
Für die Umwandlung von bitmap-string benutze:
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
strBase64 = Base64.encodeToString(byteArray, Base64.URL_SAFE);
diese oben String
als Eigenschaft in soapobject hochladen.
Aber bin immer Out of memory on a 11674900-byte allocation
, während der Druck und hochladen.
Und wenn ich Debuggen das Problem, ohne Druck bin immer
com.sun.jdi.InvocationException occurred invoking method.
auf soaprequest.
Wie dieses Problem zu beheben und zu upload image
zu webservice als string ?
InformationsquelleAutor Udaykiran | 2011-11-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie 3 Exemplare der 11MB Bild(
bitmap
,stream
,strBase64
). So reduzieren Sie die Speicherauslastung durch den Aufrufunterhalb dieser Zeile:
Auch den stream schließen, wenn Sie fertig sind(unten
stream.toByteArray();
):Denken Sie daran, es gibt keine Garantie, dass der Speicher gereinigt werden, unmittelbar nachdem diese Anrufe. Richtige Art und Weise zu behandeln diese Art von situation ist die übertragung von großen Dateien, werden chunk für chunk.
habe gleichen Fehler , was Sie erwähnten in Frage.Also bitte sagen Sie die Art und Weise Sie das Problem behoben.
InformationsquelleAutor Caner
11 Millionen byte-Zuordnung viel größer als die meisten Handys' heap behandeln können. Sie definitiv nicht wollen, um mit einem byte-array dieser Größe im Speicher.
Versuchen Sie es mit insample Größe mit
BitmapFactory.decodeStream(InputStream ist, Rect outPadding, BitmapFactory.Optionen opts)
Einstellungen und Optionen für die Verwendung von insample Größe zurück ein einigermaßen großes Bild.
Es könnte möglich sein, aber entweder ist Ihr Telefon nicht haben, dass viel freier Speicher übrig ist, oder es können Speicher freigeben, so schnell wie Ihr zuweisen.
InformationsquelleAutor Jian Chen
Einen einfachen fix für einige könnte es sein, fügen Sie android:configChanges="orientation|screenSize" zu Ihrem manifest. In meinem Fall, die Nexus_S emulator stürzt ab, ohne diese Linie, während das aktuelle Nexus 7 Gerät, ich wurde getestet auf war nicht Absturz auf rotation.
Hinzufügen dieser zu sein scheint, eine einfache Lösung für apps, die haben ein paar große "match_parent" bitmaps zu drehen und die Größe ändern.
Vorsichtig, wenn Sie Gebäude für APIs, die vor der 13!
InformationsquelleAutor whyoz