Título: Como guardar arraylist en archivo de texto interno android java Publicado por: victor96 en 19 Noviembre 2018, 12:32 pm Estoy buscando como guardar mediante código un archivo de texto que contenga un arraylist, he intentado con este código, pero da error cuando intenta guardar dicho arraylist en el archivo
try { OutputStreamWriter fout= new OutputStreamWriter( openFileOutput("contactos.txt", Context.MODE_PRIVATE)); fout.write(contactos); fout.close(); } catch (Exception ex) { Log.e("Ficheros", "Error al escribir fichero a memoria interna"); } En este caso contactos es el arraylist que deseo guardar dentro del archivo contactos.txt Título: Re: Como guardar arraylist en archivo de texto interno android java Publicado por: rub'n en 19 Noviembre 2018, 13:42 pm Hola usa Geshi, y prueba este código, depende como lo apliques quizas genere error, postea el log para ver la posible excepción
(https://3.bp.blogspot.com/-O6qDroNEzts/W8sWHPnV3MI/AAAAAAAADJw/mypp_PTYxbA_uKr7E-O-x0epDjSUdk3mwCK4BGAYYCw/s1600/geshi.gif) openFileOutput escribe datos en el directorio interno, haciéndolo privado para tu aplicación la linea 7 lo mete en un Thread() o sea, asíncrono para que cuando sean muchos contactos tu UI no se bloque, bueno hay muchas formas para correr eso de manera asíncrona, siendo esta una de las mas guarras como dicen en Spain, porque no retorna ningún valor Código
Código
Aparentemente pareciera que no escribiste nada pero en realidad si debes agregar esto en tu AndroidManifest.xml fuera del tag <application></application> Código
Si intentas leer el archivo contactos.txt debes añadir también Código
Código
Te debería imprimir su contenido, en realidad para tener acceso físico a ese archivo debes tener el smartphone rooteado, a menos que uses el Device File Explorer por ejemplo el de Android Studio, esto es solo en modo de developer (http://1.bp.blogspot.com/-mRC-6--5FRk/W_Vc7uBvjDI/AAAAAAAADTA/E-x3gG7nbfM7MCka-WKWUmpHABnoxqKegCK4BGAYYCw/s900/subirAndroid.gif) Si deseas escribir el fichero contactos.txt en directorios públicos como Documents, Movies, DCIM etc , debes usar Código primero creas el directorio en cuestión por ejemplo /Contactos porque? pues porque no existe, sino arrojaría Código
Código
Una vez que ya tenemos el directorio creado podemos indicar donde queremos que se cree nuestro contactos.txt Código
quedando Código
Título: Re: Como guardar arraylist en archivo de texto interno android java Publicado por: victor96 en 21 Noviembre 2018, 14:50 pm He probado el código que me has proporcionado, pero sigo teniendo un error que no se como solucionar:
He probado a debuggear el programa para ver que es lo que falla y me aparece que el fallo se encuentra en la linea 10, justo la linea que crea el archivo. Este es el codigo que probe: Código: @RequiresApi(api = Build.VERSION_CODES.O) Y esta es la excepción que me aparece en el debugger: Código: e: "java.nio.file.AccessDeniedException: /storage/emulated/0/Contactos" Código
Antes de crear el directorio, pero me sigue apareciendo el mismo error a pesar de que le concedo todos los permisos para crear la carpeta allí No se que puede ser la verdad Título: Re: Como guardar arraylist en archivo de texto interno android java Publicado por: rub'n en 21 Noviembre 2018, 15:07 pm Hola,
Bueno como decia Jack aka el popular the Ripper(destripador), empecemos por partes (http://2.bp.blogspot.com/-IUFJYeRmqmY/W_VsUYWJOcI/AAAAAAAADTM/BxVC0mNeH0IgXVjKi9mRkvJa2vVyfHeGwCK4BGAYYCw/s400/jack.png) Usa geshi, por segunda vez :xD
y de paso tu metodo Código No usas el parámetro entrante ahí correspondiente a la linea 10 dog Título: Re: Como guardar arraylist en archivo de texto interno android java Publicado por: victor96 en 21 Noviembre 2018, 16:02 pm Gracias de nuevo por tu ayuda, te contesto a todas:
1. Creo que mi version es la 4.03(15), pero como puedes ver en el código, puse para que pueda permitir hasta la versión oreo(26) Código
2. Los permisos los tengo metidos fuera de la aplicacion te pongo el androidmanifest para que lo puedas ver completo: Código
3. No me importa realmente si es en uno publico o en uno privado, el que de menos problemas para escribir. 4. Si que uso el parámetro, lo que pasa es que lo tengo declarado en otra parte del programa de esta forma: Código
Y luego entra en un metodo como parametro Código
No quiero poner el código completo del programa porque es muy largo, disculpas si te ha podido confundir, si necesitas mas lineas de código dímelo. Título: Re: Como guardar arraylist en archivo de texto interno android java Publicado por: rub'n en 21 Noviembre 2018, 21:28 pm dog esa anotación por alguna razón vía reflection no esta haciendo el trabajo, todo lo hice con la ultima API de android, si estas usando un api tan vieja sera por tus requerimientos :-\ , algo pasa por ahí q no logro ver aun, baje hasta la api ICE CREAM
logro escribir el archivo en la sdDcard /Contactos/contactos.txt y visualizarlo por el Device File Explorer de momento me reporto luego... Título: Re: Como guardar arraylist en archivo de texto interno android java Publicado por: victor96 en 22 Noviembre 2018, 14:22 pm Pues lo único que se me ocurre es pasarte el código completo, haber si puedes ver el fallo :S
Editar contacto.java Código
Título: Re: Como guardar arraylist en archivo de texto interno android java Publicado por: rub'n en 22 Noviembre 2018, 22:50 pm Hola, bueno bueno ok retomemos
Usa esta api, que es la ultima control + alt + s y en el buscador escribe android sdk (http://3.bp.blogspot.com/-BX3-RhrQYD0/W_cgJH2hWLI/AAAAAAAADTs/dvKXbj5N2nAZM_oWjaA4AJb3ZLRHRnSXACK4BGAYYCw/s800/ANdroiSdks.png) Como vas a usar otra api, debes crear una nueva unidad virtual, si por alguna razon no te quiera iniciar el .apk diciendo waiting for target device to come online android hazle wipe data como en la imagen siguiente (http://3.bp.blogspot.com/-WvR5tD0HQXo/W_cgPN496FI/AAAAAAAADT0/G0SXMZxUtpg4PLrvmhrWqHvgTqfonQ1tQCK4BGAYYCw/s800/WipeData.png) en tu archivo de compilación de gradle Module:app Código
este método lo vamos a invocar en la clase EditarContacto.java(Las clases se escriben con mayúsculas) en el onCreate() por ejemplo. porque desde Marshmallow o superiores el código de solicitud 112 nos da permisos, en tiempo de ejecución Código
Pues anteriormente leemos el archivo .txt cuando estaba en el directorio privado de la siguiente manera, bueno yo, tu no podías :xD Código
Ahora así, no te dejes intimidar por el lijero cambio es casi lo mismo, en realidad no me gusta ese InputStreamReader :xD, y tambien que no necesitamos a openFileInput que retorna un FileInputStream, pero del directorio privado, no es este caso, estamos escribiendo y leyendo desde el public dir dog No hace falta que le pases la lista como parámetro, porque leeremos desde el directorio Código
Otras cosas que se me había olvidado, por ejemplo para hacer el trabajo casi completo, bueno hasta que apliques todo lo que te menciono, si por casualidad no encuentras el directorio en el emulador, en archivos, en la esquina superior derecha debes darle mostrar almacenamiento interno. En la linea 235, tu clase Contacto, tienes un contructor telescópico, cuando tengas una clase con unos 3 parámetros o mas, aplica patron builder, la hará mas legible, mantenible etc. yyyyy el método escribirDatosContactos() :xD lo primero que te mostré recuerda que en tu clase Contacto debes tener sobrescrito el método toString() si o si para este ejemplo, en el Android Studio oprime alt + insertar, y ahí puedes crear el toString() ya configurado con todas las instancias concatenadas. Título: Re: Como guardar arraylist en archivo de texto interno android java Publicado por: victor96 en 23 Noviembre 2018, 19:36 pm Ya he conseguido que me guarde el fichero, muchas gracias, pero si quisiera cargar cada dato del array y cargarlo en mi tablerow como podría hacerlo?
|