Home Menu

Menu



Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android


 
Herramientas
  #1  
Viejo 17/02/14, 12:59:32
Avatar de Zaitung
Zaitung Zaitung no está en línea
Usuario poco activo
Mensajes: 22
 
Fecha de registro: jun 2012
Mensajes: 22
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Leer fichero JSON

Tengo una app que se descarga un fichero en formato JSON de una pagina web, una vez que lo tengo le voy extrayendo los campos que necesito, de la siguiente manera:

Código:
 try {
	            HttpClient httpclient = new DefaultHttpClient();
	            HttpResponse httpResponse = httpclient.execute(new HttpGet(URL));	 
	            inputStream = httpResponse.getEntity().getContent();	 
	            
	            if(inputStream != null){
	                result = convertInputStreamToString(inputStream);
	                }
	            else
	                result = "Did not work!";
	        } catch (IOException ex) {
	            ex.printStackTrace();
	        }

        JSSONObject jsonObj = new JSONObject(result);
				
	File= jsonObj.getJSONArray("resources");
				
	for (int i = 0; i < File.length(); i++) {
		JSONObject c = File.getJSONObject(i);
		variable1= c.getDouble("TAG");
         }
Sin embargo ese fichero tiene una gran cantidad de registros y a veces llega a tardar varios minutos.
No se si hay alguna manera de leerlo mas rápido o si en otro formato aceleraría la búsqueda (tengo disponibles RDF/XML, HTML, JSON, N3, XML, TURTLE, CSV, ATOM, JSONLD)

Responder Con Cita


  #2  
Viejo 17/02/14, 13:16:21
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
¿Cuánto es una gran cantidad? ¿100? ¿200? ¿1.000.000? Con 100 o 200 no debería tardar mucho, con 1.000.000 si puede tardar tiempo, aunque tanto como varios minutos me parece excesivo. Además, ¿Qué es lo que tarda? ¿Sólo la deserialización o incluyes el tiempo de descarga? Si el JSON ocupa mucho y estás en 2G también hay que tenerlo en cuenta.

Precisamente la ventaja del JSON frente a otros formatos como el XML o el HTML es que ocupa bastante menos. El más ligero de todos es el CSV, pero también es el más difícil de entender viendo el fichero. Y tampoco vas a ahorrar mucho.

Y para trabajar con JSON te recomiendo la librería GSON de Google. Te hace por detrás todo el trabajo de la deserialización, y lo único que tienes que hacer es crear objetos con los nombres que vienen en el JSON.
Responder Con Cita
  #3  
Viejo 17/02/14, 14:00:37
Avatar de Zaitung
Zaitung Zaitung no está en línea
Usuario poco activo
Mensajes: 22
 
Fecha de registro: jun 2012
Mensajes: 22
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Muchas gracias probaré con la librería GSON
Responder Con Cita
  #4  
Viejo 17/02/14, 21:28:16
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
La librería GSON no va a hacer que vaya más rápido, lo único que hace es hacer por detrás el proceso de deserialización que haces en el For, pero de una forma más limpia y escalable. Tan escalable que si añades campos nuevos en el JSON lo único que tendrás que hacer es añadirlos a la clase que quieres deserializar y GSON te hará todo el trabajo.
Responder Con Cita
  #5  
Viejo 18/02/14, 10:20:35
Avatar de Zaitung
Zaitung Zaitung no está en línea
Usuario poco activo
Mensajes: 22
 
Fecha de registro: jun 2012
Mensajes: 22
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
He estado mirando y veo que el fichero se baja en segundos (ocupa 400 Kb) sin embargo tarda 1 minuto en crear el JSON Object a partir del fichero, he estado buscando información sobre la librería GSON y la verdad es que como no tengo mucha idea se me hace un poco cuesta arriba. Si hay alguien que sepa de algún tutorial me vendría muy bien gracias =)
Responder Con Cita
  #6  
Viejo 18/02/14, 11:36:14
Avatar de jtsamper
jtsamper jtsamper no está en línea
Miembro del foro
Mensajes: 149
 
Fecha de registro: abr 2013
Localización: Madrid
Mensajes: 149
Modelo de smartphone: Xperia Arc, Nexus 5
Versión de ROM: 4.0.4, 4.4
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Pero tienes que mostrar todos a la vez?? o lo guardas hasta que lo necesitas??? Siempre tiene que ser descargado??
Responder Con Cita
  #7  
Viejo 18/02/14, 12:42:13
Avatar de Zaitung
Zaitung Zaitung no está en línea
Usuario poco activo
Mensajes: 22
 
Fecha de registro: jun 2012
Mensajes: 22
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Al final he resuelto el problema de una manera mas sencilla y que desconocía, uso una petición PHP para filtrar los resultados y asi evito descargarme todo el fichero, y luego filtrar los que necesito. Sin embargo el problema viene que cuando defino la URL, parece que no puede contenter "\:" algo que me es necesario.

private String URL = URL + "&query=(tag\:";

Error : Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )

¿Alguna idea?

Responder Con Cita
  #8  
Viejo 18/02/14, 13:49:38
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
Prueba con \\:
Responder Con Cita
  #9  
Viejo 18/02/14, 14:19:33
Avatar de Zaitung
Zaitung Zaitung no está en línea
Usuario poco activo
Mensajes: 22
 
Fecha de registro: jun 2012
Mensajes: 22
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Al final resolví el problema, por si alguien le pasa utilicé un equivalente, para el slash es %2F y para el contaraio, el que yo necesitaba es %5C

Última edición por Zaitung Día 18/02/14 a las 14:45:53
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 16:08:33 (GMT +1)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007