Intereting Posts
Как создать новый диалоги андроида в диалоговом окне «круг» Как проверить, имеет ли текущая активность диалоговое окно впереди? Использование FLAG_ACTIVITY_REORDER_TO_FRONT для переключения между постоянно работающими пользовательскими интерфейсами приводит к ошибке «no window focus» Как создать клиентскую библиотеку Retrofit из wp rest api с помощью swagger Как использовать Youtube Player с современным интерфейсом в Android с помощью YoutubePlayerSupportFragment Активность камеры, возвращающая нулевой андроид Поток приложений для подключения к одноранговой сети для Android? Сообщение Firebase NoSuchMethodError.zzUr exception Android NDK Mutex Поскольку для Android 6.0, прослушивающего изменения PhoneStateListener.LISTEN_DATA_CONNECTION_STATE, больше не требуется разрешение READ_PHONE_STATE RecyclerView Q & A Поддержка отпечатков пальцев Huawei P9 lite GetSupportFragmentManager (). FindFragmentById () возвращает null Лучший способ разместить изображение в одном месте на всех устройствах? Можно ли указать несколько значений гравитации в элементе spinner custom_style.xml?

Недостаточно памяти при распределении байтов (битмап как строка для веб-сервиса с использованием мыла)

У меня есть bitmap , поэтому я хочу загрузить строку webserivceas и хочу извлечь строку.

Для преобразования bitmap в строку am с использованием:

 ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); strBase64 = Base64.encodeToString(byteArray, Base64.URL_SAFE); 

Это выше String использует как свойство для soapobject для загрузки.

Но я получаю Out of memory on a 11674900-byte allocation , а при печати и выгрузке.

И если я отлаживаю проблему, без печати

 com.sun.jdi.InvocationException occurred invoking method. 

На soaprequest.

Как решить эту проблему и upload image в webservice как строку?

Solutions Collecting From Web of "Недостаточно памяти при распределении байтов (битмап как строка для веб-сервиса с использованием мыла)"

Вы создаете 3 копии 11 МБ изображения (битмап, stream , strBase64 ). Поэтому уменьшите использование памяти, вызвав

 bitmap.recycle(); 

Ниже этой строки:

 bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 

Также закройте поток, когда вы закончите с ним (ниже stream.toByteArray(); ):

 stream.close(); stream = null; 

Помните, что нет гарантии, что память будет очищена сразу после этих вызовов . Правильный способ справиться с этим типом ситуации – передать большой кусок файлов куском.

Распределение в 11 миллионов байт намного больше, чем может обрабатывать куча большинства телефонов. Вы определенно не хотите содержать массив байтов такого размера в памяти.

Попытайтесь использовать малый размер с помощью

BitmapFactory.decodeStream (InputStream is, Rect outPadding, BitmapFactory.Options выбирает)

И параметры настроек, чтобы использовать неровный размер, чтобы вернуть изображение с достаточно большим размером.

Простым решением для некоторых может быть добавить android: configChanges = "orientation | screenSize" в ваш манифест. В моем случае эмулятор Nexus_S рушился без этой строки, в то время как фактическое устройство Nexus 7, которое я тестировал, не рушилось при вращении.

Добавление этого параметра является легким решением для приложений, у которых есть несколько больших растровых изображений match_parent для поворота и изменения размера.

Осторожно, если вы создаете API до 13!