2010-09-28 4 views
0

У меня есть следующий код:Разбирает простую строку JSON в Android

String response = webService.webGet(""); the response of the web service 

String LargeImage = new Gson().fromJson(response,String.class); 

byte[] imageByteArray = Base64.decode(LargeImage); 

ответ походит: «iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCA ...» кодировка Base64 изображения, имеющее около 400,000 символов.

Ответ приходит очень быстро от веб-службы. Когда он пытается разобрать его с помощью Gson через некоторое время (например, 20-30 секунд), я получаю сообщение об ошибке с памятью. Как я могу разобрать эту простую строку без Gson, она должна быть довольно простой, но я не знаю, как это сделать. Пожалуйста, посоветуйте мне. Спасибо за ваше время.

ответ

2

Измените кодировку изображения Base64 на URL, где вы можете загрузить изображение напрямую.

Затем перейдите на страницу flexjson 2.1, и вы можете легко разыгрывать JSON на Android в нескольких строках. Это также быстрее, чем GSON.

http://flexjson.sourceforge.net

Но из вашего поста, похоже, вы просто передать изображение Base64 над JSON в виде одной строки. В этом случае не нужно использовать JSON. Если вы не планируете обматывать некоторые метаданные вокруг него в будущем.

Также пропустите сохранение изображения в БД. Просто напишите его в файловой системе и поместите путь к файлу в базу данных, связанную с вашим объектом. Гораздо проще отлаживать, когда вы задаетесь вопросом, какое изображение вы загрузили и т. Д.

1

Ответ: «iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCA ...» кодированное изображение Base64, содержащее около 400 000 символов.

У вас есть , кол-во сообщений:, шутка.

Просьба сообщить мне.

Найдите разумный веб-сервис и переключитесь на него. Если кто-то из вашей фирмы написал веб-службу, уволите их. Если вы написал веб-сервис, пожари себя. Я не вижу необходимости возвращать образ - особенно тот, который массивный - в кодировке Base64, завернутый в JSON.

А пока вы можете попробовать built-in Android JSON parser, а не Gson.

+0

Я только потребляю его, не написал. Как бы вы рекомендовали действовать в этом случае? Скачайте изображение напрямую? Измените что-нибудь в веб-сервисе? – Alin

+0

И на второй ноте не нужно так сильно. Мы учимся и переживаем. Легко сказать, что это неправильно, но сложнее, как сделать все правильно ... Мне нужно принести изображение 400x400px с веб-сайта безопасным способом и сохранить его на таблице sqlite и отобразить его на изображении. Веб-сервис может быть изменен. – Alin

+1

@alin: Base64 + JSON не добавляет значения и занимает процессорное время с обеих сторон, что особенно ценно на телефоне. Это также увеличивает вашу пропускную способность, которую пользователи в данных данных планируют заботиться о справедливом бите. Загрузите исходное изображение с простого URL-адреса и сохраните его в столбце BLOB в SQLite. – CommonsWare