Avisos

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 27/06/12, 18:15:09
Avatar de monchyrcg
monchyrcg monchyrcg no está en línea
Miembro del foro
Mensajes: 384
 
Fecha de registro: sep 2011
Localización: Cartagena
Mensajes: 384
Modelo de smartphone: LG Optimus Black
Versión de ROM: v10d
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
Error en la lectura de un txt

Buenas tardes, tengo una aplicación que cojo un txt de la sd y lo leo todo funcionaba bien pero ahora me da un error. En realidad no es un error la aplicación cuando arranca se queda con la pantalla en negro así todo el tiempo, en el logcat no me aparece error solo una linea que pone:

Código:
06-27 17:40:57.527: I/dalvikvm(3610): Wrote stack traces to '/data/anr/traces.txt'
En el traces.txt aparece esto:
Código:
DALVIK THREADS:
(mutexes: tll=0 tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)
"main" prio=5 tid=1 SUSPENDED
  | group="main" sCount=1 dsCount=0 obj=0x400245c8 self=0xcfb8
  | sysTid=3610 nice=0 sched=0/0 cgrp=default handle=-1345006464
  at java.io.FileInputStream.read(FileInputStream.java:~290)
  at java.io.FileInputStream.read(FileInputStream.java:245)
  at com.zonasVuelo.Monchy.ZonasVueloActivity.leer(ZonasVueloActivity.java:126)
  at com.zonasVuelo.Monchy.ZonasVueloActivity.leerPuntosPropios(ZonasVueloActivity.java:198)
  at com.zonasVuelo.Monchy.ZonasVueloActivity.onCreate(ZonasVueloActivity.java:116)
  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1622)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1674)
  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:942)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:130)
  at android.app.ActivityThread.main(ActivityThread.java:3694)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:507)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
  at dalvik.system.NativeStart.main(Native Method)
Doy por hecho que la maquina virtual de java tiene problemas a la hora de leer el txt pero no se porque, el archivo traces.txt si lo leéis me da error en una línea 126 en esa línea esta el siguiente código.

Código:
while(fileIN.read(reader)!= -1){ }
Este código esta en un método que también lo pongo

Código:
private String leer(){
		String todo = null;
		if(sitios.exists() && sitios.canRead()){
			FileInputStream fileIN = null;
			try{
			   	fileIN = new FileInputStream(sitios);
		    	byte [] reader = new byte[fileIN.available()];
		    	while(fileIN.read(reader)!= -1){ }
		    	todo = new String(reader);
		    }catch(Exception ex){
				ex.printStackTrace();
			}finally{
				if(fileIN != null){
					try{
						fileIN.close();
					}catch(IOException ioExcep){
						ioExcep.printStackTrace();
					}
				}
			}
		}
		return todo;
	}
Muchas gracias, un saludo.
Responder Con Cita


  #2  
Viejo 28/06/12, 16:47:12
Avatar de monchyrcg
monchyrcg monchyrcg no está en línea
Miembro del foro
Mensajes: 384
 
Fecha de registro: sep 2011
Localización: Cartagena
Mensajes: 384
Modelo de smartphone: LG Optimus Black
Versión de ROM: v10d
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
Veo que la gente lo lee, pero nadie dice nada.
Responder Con Cita
  #3  
Viejo 28/06/12, 17:18:30
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Android se molesta un poco (mucho) si intentas leer streams desde el hilo de ejecución principal, y más si lo haces en el onCreate que tiene que ser un método muy ligero y salir cuanto antes.

Los ANR (Application Not Responding) suelen ser por eso, por tener el hilo principal (UI Thread) ocupado mucho tiempo.
Responder Con Cita
  #4  
Viejo 29/06/12, 10:09:46
Avatar de kamarilla
kamarilla kamarilla no está en línea
Miembro del foro
Mensajes: 347
 
Fecha de registro: abr 2011
Localización: Bilbao
Mensajes: 347
Modelo de smartphone: Xperia Neo
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por monchyrcg Ver Mensaje
Buenas tardes, tengo una aplicación que cojo un txt de la sd y lo leo todo funcionaba bien pero ahora me da un error. En realidad no es un error la aplicación cuando arranca se queda con la pantalla en negro así todo el tiempo, en el logcat no me aparece error solo una linea que pone:

Código:
06-27 17:40:57.527: I/dalvikvm(3610): Wrote stack traces to '/data/anr/traces.txt'
En el traces.txt aparece esto:
Código:
DALVIK THREADS:
(mutexes: tll=0 tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)
"main" prio=5 tid=1 SUSPENDED
  | group="main" sCount=1 dsCount=0 obj=0x400245c8 self=0xcfb8
  | sysTid=3610 nice=0 sched=0/0 cgrp=default handle=-1345006464
  at java.io.FileInputStream.read(FileInputStream.java:~290)
  at java.io.FileInputStream.read(FileInputStream.java:245)
  at com.zonasVuelo.Monchy.ZonasVueloActivity.leer(ZonasVueloActivity.java:126)
  at com.zonasVuelo.Monchy.ZonasVueloActivity.leerPuntosPropios(ZonasVueloActivity.java:198)
  at com.zonasVuelo.Monchy.ZonasVueloActivity.onCreate(ZonasVueloActivity.java:116)
  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1622)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1674)
  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:942)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:130)
  at android.app.ActivityThread.main(ActivityThread.java:3694)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:507)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
  at dalvik.system.NativeStart.main(Native Method)
Doy por hecho que la maquina virtual de java tiene problemas a la hora de leer el txt pero no se porque, el archivo traces.txt si lo leéis me da error en una línea 126 en esa línea esta el siguiente código.

Código:
while(fileIN.read(reader)!= -1){ }
Este código esta en un método que también lo pongo

Código:
private String leer(){
		String todo = null;
		if(sitios.exists() && sitios.canRead()){
			FileInputStream fileIN = null;
			try{
			   	fileIN = new FileInputStream(sitios);
		    	byte [] reader = new byte[fileIN.available()];
		    	while(fileIN.read(reader)!= -1){ }
		    	todo = new String(reader);
		    }catch(Exception ex){
				ex.printStackTrace();
			}finally{
				if(fileIN != null){
					try{
						fileIN.close();
					}catch(IOException ioExcep){
						ioExcep.printStackTrace();
					}
				}
			}
		}
		return todo;
	}
Muchas gracias, un saludo.


Buenas:

Lo primero, comentarte que si explicarías lo que intentas hacer con el fichero, seria algo mas facial ayudarte, o si el código estaría comentado.
Aun asi, por lo que deduzco, tu intención es leer el fichero "traces.txt" y volcarlo en un String "todo" con el cual luego haras lo que sea.... ¿Me equivoco?

Por otro lado, no se si es la manera mas efectiva de leer de un fichero de texto de la SD, ya que coges un fichero de texto, que ya sabes que esta compuesto por strings, pero tu lo lees como byte y lo conviertes a string de nuevo. Con esto no te quiero decir que este mal, pero haces trabajar mas al proceso, sobretodo si el fichero es grande.

Mi consejo y la manera que uso yo en mis programas para leer los fichero que tengo en la SD... es la siguiente (No se si es la mejor, pero funciona perfectamente y rápido):

He modificado mi código para sea lo que intentas hacer mas o menos.

Código:
private String leer(){
String todo = "";
 	    	try{
                   \\ACCEDEMOS AL FICHERO QUE SE ENCUENTRA EN AL SD

 		   File f = new File(Environment.getExternalStorageDirectory()+"/RUTA_DE_FICHERO/"+"/traces.txt");
 		   
                    FileInputStream fileIS = new FileInputStream(f);
 		   
                   BufferedReader buf = new BufferedReader(new InputStreamReader(fileIS));
 		 
 		   String readString = new String();
 		 
 		   //Leemos cada linea del fichero y la almacenamos en la variable todo

 		   while((readString = buf.readLine())!= null){
 			  
 			  todo=todo+(readString);
 		     
 		 
 		   }

                  \\CERRAMOS EL ACCESO AL FICHERO

 		   buf.close();
 		} catch (FileNotFoundException e) {

 		  \\ CÓDIGO A REALIZAR SI EL FICHERO NO SE ENCUENTRA

 		   e.printStackTrace();
 		 
 		} catch (IOException e){
 		 
                    \\ CÓDIGO A REALIZAR SI POR LO QUE SEA HAY UN FALLO DE LECTURA\ESCRITURA

 		   e.printStackTrace();}
	   return todo;
 }

Espero que te halla sido de ayuda, si tienes alguna duda mas y puedo ayudarte, no dudes en preguntar ;)

Última edición por kamarilla Día 29/06/12 a las 10:12:30
Responder Con Cita
  #5  
Viejo 29/06/12, 12:56:34
Avatar de monchyrcg
monchyrcg monchyrcg no está en línea
Miembro del foro
Mensajes: 384
 
Fecha de registro: sep 2011
Localización: Cartagena
Mensajes: 384
Modelo de smartphone: LG Optimus Black
Versión de ROM: v10d
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
Gracias por el consejo de cambiar el modo de lectura, lo tendré en cuenta y lo cambiare.

No quiero leer el traces.txt quiero leer otro archivo de texto que esta en la SD. El fichero contiene por cada linea una latitud, longitud, nombre separados por comas, cojo esto y luego lo pinto en el mapa. Algo bastante fácil y sencillo y todo me iba hasta que de repente nada la aplicación en negro.

No me se ningún ANR se queda en negro y en el logCat pone lo que puse en el primer log, yo creo que se peta la maquina virtual de Android y me escribe el error en el fichero de texto traces.txt. Voy a probar ahora mismo en otro movil y con lo que tu me dices y os cuento.
Responder Con Cita
  #6  
Viejo 29/06/12, 13:15:10
Avatar de kamarilla
kamarilla kamarilla no está en línea
Miembro del foro
Mensajes: 347
 
Fecha de registro: abr 2011
Localización: Bilbao
Mensajes: 347
Modelo de smartphone: Xperia Neo
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por monchyrcg Ver Mensaje
Gracias por el consejo de cambiar el modo de lectura, lo tendré en cuenta y lo cambiare.

No quiero leer el traces.txt quiero leer otro archivo de texto que esta en la SD. El fichero contiene por cada linea una latitud, longitud, nombre separados por comas, cojo esto y luego lo pinto en el mapa. Algo bastante fácil y sencillo y todo me iba hasta que de repente nada la aplicación en negro.

No me se ningún ANR se queda en negro y en el logCat pone lo que puse en el primer log, yo creo que se peta la maquina virtual de Android y me escribe el error en el fichero de texto traces.txt. Voy a probar ahora mismo en otro movil y con lo que tu me dices y os cuento.
Ok. Espero que te sirva.

Yo por norma general, desarrollo contra el simulador de android, aunque siempre me gusta hacer pruebas contra mi dispositivo, ya que no se compartan del todo igual.

Suerte, y ya nos contaras.
Responder Con Cita
  #7  
Viejo 29/06/12, 13:26:16
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Cita:
Originalmente Escrito por monchyrcg Ver Mensaje
No me se ningún ANR se queda en negro y en el logCat pone lo que puse en el primer log
La pantalla se queda en negro porque bloqueas el hilo principal que es el que pinta, hasta que no salga del onCreate no tiene nada que pintar. Y concretamente, de la línea que pusiste no pasa porque se queda bloqueado ahí y Android suspende el hilo.

¿Esto de las coordenadas no lo habías hecho ya hace tiempo? ¡Ánimo!
Responder Con Cita
Respuesta

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

Herramientas

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: 13:46:44 (GMT +1)

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