2010-09-28 4 views
0

Je le code suivant:Parse simple chaîne JSon dans Android

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

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

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

est comme: "iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCA ..." une image codée base64 ayant environ 400,000 caractères.

La réponse vient très rapidement du service Web. Quand il essaie de l'analyser avec Gson après un certain temps (comme 20-30 secondes), je reçois une erreur avec mémoire insuffisante. Comment puis-je analyser cette chaîne simple sans Gson, il devrait être assez simple, mais je ne sais pas comment le faire. S'il vous plaît me conseiller. Merci pour votre temps

Répondre

2

Modifiez votre encodage d'image Base64 dans une URL où vous pouvez télécharger l'image directement.

Alors allez chercher flexjson 2.1 et vous pouvez analyser JSON sur Android très facilement en quelques lignes. C'est aussi plus rapide que GSON.

http://flexjson.sourceforge.net

Mais à partir de votre poste, il semble que vous êtes juste d'envoyer l'image base64 sur JSON comme une seule chaîne. Pas besoin d'utiliser JSON dans ce cas. Sauf si vous envisagez d'envelopper certaines métadonnées dans le futur.

Ignore également le stockage de l'image dans le DB. Il suffit de l'écrire dans le système de fichiers et de placer le chemin du fichier dans la BD liée à votre objet. Beaucoup plus facile à déboguer quand vous vous demandez quelle image vous avez téléchargée, etc.

1

réponse est comme: "iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCA ..." une image encodée en Base64 ayant environ 400.000 caractères.

Vous avez avez pour vous plaisantez.

S'il vous plaît me conseiller.

Trouvez un service Web sensible et passez-y. Si quelqu'un de votre entreprise a écrit le service Web, lancez-le. Si vous a écrit le service Web, lancez-vous. Je ne vois pas la nécessité de renvoyer une image - en particulier une image massive - dans l'encodage Base64, enveloppé dans JSON.

En attendant, vous pouvez essayer le built-in Android JSON parser plutôt que Gson.

+0

Je ne le consomme que, je ne l'ai pas écrit. Comment recommanderiez-vous de procéder dans ce cas? Télécharger l'image directement? Changer quelque chose dans le service Web? – Alin

+0

Et sur une deuxième note, il n'y a pas besoin d'être si difficile. Nous apprenons et expérimentons. Il est facile de dire que c'est faux, mais plus difficile de faire les choses correctement ... Je dois apporter une image 400x400px d'un site Web via un moyen sécurisé et le stocker sur une table sqlite et l'afficher sur une imageview. Le service Web peut être changé de requis. – Alin

+1

@alin: Le JSON Base64 + n'ajoute aucune valeur et prend du temps CPU des deux côtés, ce qui est particulièrement précieux sur un téléphone. Il augmente également votre bande passante, les utilisateurs sur les plans de données mesurés se soucient d'un peu juste. Téléchargez l'image d'origine à partir d'une URL normale et stockez-la dans une colonne BLOB dans SQLite. – CommonsWare