Tutoría 2023-01-18 (el webex no graba)
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
la grabación y voy a suponer que estoy grabando, ¿de acuerdo? Cuando acabe pues la subo a alguna parte
00:00:00
porque ya no me están dejando grabar aquí, no se puede grabar aquí, por lo que sea, lo han quitado.
00:00:06
Preguntaré, por si acaso, a quién sabe algo. Vamos, tiene pinta de que no...
00:00:13
O sea, han decidido que era demasiado fácil dar clase grabando.
00:00:18
Vale, pues... Ah, si otros profesores consiguen grabar, avisadme.
00:00:23
no sé si vais a acoger a otros profesores
00:00:28
y lo consigue él, pues
00:00:30
decidme que lo hacen y busco
00:00:31
con mucho interés, a ver qué tal
00:00:34
Sí, lo que pasa es que, por ejemplo
00:00:35
el lunes tuve yo
00:00:37
la tutoría de
00:00:40
de programación
00:00:41
de servicios
00:00:45
y el profesor es que no graba
00:00:45
por lo cual
00:00:48
y es que solo estoy en esa
00:00:49
y en inglés, aparte de la
00:00:52
de la de la malla
00:00:53
Pues bueno, pues no sé
00:00:54
Vale, pues me salto al 7, presencia de información, que esto hay que grabar. Bueno, decidme que hay que tener datos en alguna parte. ¿Alguna pregunta? ¿Alguna cosa que queráis decir en vez de ir yo un poco a lo loco por ahí? Tanto por el chat como por... Estoy sin audio.
00:00:58
Vale, pues
00:01:21
básicamente
00:01:26
lo más así
00:01:27
que te podía preguntar sería lo del tema
00:01:29
de SQLite
00:01:32
que tampoco explica mucho
00:01:34
en la teoría
00:01:36
pero vamos, entiendo que lo iremos
00:01:37
viendo en próximos temas
00:01:40
Pues
00:01:41
no, fíjate
00:01:42
lo vas viendo en próximos módulos
00:01:45
si no lo estás viendo, ya
00:01:48
SQLite es SQL
00:01:49
Entonces
00:01:51
Eso sí
00:01:52
Claro, pues simplemente con decirte
00:01:54
Cómo se abre el SQLite, pues ya digamos
00:01:57
Que se apaña a usted
00:01:59
Vamos a probar un ejemplo
00:02:01
Vale, o sea, que con lo que viene en la teoría no es vale
00:02:02
Claro, en teoría ya vale
00:02:05
A ver, bueno, yo precisamente
00:02:06
Tengo hecho un ejemplo
00:02:08
Tengo una aplicación
00:02:11
Así que
00:02:12
Esto no lo he hecho yo
00:02:14
¿Cómo que es?
00:02:16
¿Qué te voy a hacer? ¿Commit? No sé yo manejar esto. Bueno, da igual. Me he hecho una aplicación que lo que hace precisamente es eso, es manejar el SQLite para ver un poquito cómo va.
00:02:19
voy a arrancarla la toca arrancar en el teléfono de verdad porque se me ha roto el pc bueno sólo
00:02:33
tengo 8 gigas y éste no aguanta con todo me pongo a grabar estoy un poco preocupado a ver qué tal
00:02:43
me va la memoria porque bueno como veis por aquí arriba pues tengo 8 y he gastado 6 pero ya tengo
00:02:48
3.5 de swap, quiere decir que tengo
00:02:57
mucha parte de mi ordenador metido a disco
00:02:59
tengo el Firefox, el
00:03:01
OBS
00:03:03
el estudio, el Gradle
00:03:04
y todo eso pues
00:03:07
se nota
00:03:10
¿y el estudio lo consigues correr con 8 GB?
00:03:12
pues mira, aquí está
00:03:14
el estudio, ahora hay un nuevo
00:03:15
el estudio es el que está aquí arriba, es el que está puesto
00:03:17
tiene 6 de virtual
00:03:20
y 2 de residente
00:03:22
o sea
00:03:24
2 GB de RAM
00:03:25
realmente RAM y luego 6 GB
00:03:27
más que como no caben en RAM van a disco
00:03:29
pero si esa parte tengo suerte
00:03:31
y no la uso, pues no pasa nada
00:03:33
si hay suerte
00:03:35
vamos aquí está colocado por memoria
00:03:38
normalmente suele ser
00:03:39
no, no, estoy justo
00:03:41
estoy justito, sí, no estoy sobrado
00:03:42
bueno, pues ya lo he lanzado
00:03:45
y no lo podéis ver porque está en un teléfono
00:03:47
pero con un poco de suerte yo vengo
00:03:49
¿dónde tengo la otra ventana?
00:03:51
A ver, yo no sé ni qué ventanas tengo. Me falta una ventana por alguna parte. Ah, es que tengo dos con él este. Bueno, da igual. Pues tengo aquí el SCRECOPY, que esto se me ve el teléfono de verdad. Esto no es un lado, esto es un teléfono de verdad que tengo aquí al lado.
00:03:52
Cuando le doy así, ¿veis el dedo?
00:04:10
Que no va con el ratón
00:04:14
Que está ahí arriba
00:04:16
Tengo un teléfono de verdad
00:04:17
Esta es una aplicación que tengo
00:04:19
Donde voy haciendo todas las pruebas que me van haciendo falta
00:04:22
Como veis, cada vez que me hace falta una prueba
00:04:24
Le meto un botón nuevo
00:04:26
Allá va la cosa
00:04:27
Por ejemplo, una tonta, hacer llamada
00:04:29
Pues te va y llama
00:04:31
¿Vale?
00:04:32
Cancelar
00:04:35
Vale, pues aquí tengo la prueba
00:04:36
De ese culite
00:04:38
Le voy a dar ahora, primero vamos a ver lo que hace el código, a ver qué tal. ¿Qué hace mi código? Bueno, pues el código, este es el onCreate, aquí tengo la asignación a cada botón, entonces el botón SQLite, pues lo que hace es la prueba SQLite.
00:04:39
Me voy a la prueba SQLite con control B y esto es lo que hago. Lo primero que hago es sacar un new db. ¿Esto qué es? Me voy a la clase db con control B.
00:04:56
Bien, esta es la clase de B, que es una, voy a quitar esto de aquí, es un SQLite Open Helper, que viene en el temario. Uno puede manejar SQLite sin este SQLite Open Helper, sin ningún problema, pero bueno, este tiene algunas cositas que pueden venir bien.
00:05:11
Bien, en el constructor hay que pasar como siempre un contexto, para todo hace falta un contexto, un nombre y una versión.
00:05:29
Y este ronhalder le podría intentar hacer algo con él, nunca ha hecho nada con él.
00:05:44
Se llama super como tiene que ser y digo, eh, que me están haciendo una base de datos.
00:05:52
¿Qué hace el Open Helper? Se preocupa en abrir la base de datos si ya existe o crearla si no existe. Si la tiene que crear, pues él solo pasa por aquí, por este método, por el OnCreate.
00:05:56
En el onCreate aprovecho para hacer mis tablas.
00:06:11
¿Las veis aquí?
00:06:16
Sí.
00:06:18
Aquí tengo un exe que se cuele y aquí hago mis tablas.
00:06:19
Entonces, el onCreate es el método que me llaman con la base de datos,
00:06:21
con la conexión de la base de datos ya abierta para que yo cree cosas.
00:06:24
Podría hacer cualquier otra cosa, por ejemplo, también insertar datos,
00:06:27
pero en principio es para crear tablas.
00:06:29
¿Vale?
00:06:31
Después, cuando ya, si resulta que en algún momento cambio la aplicación
00:06:32
y yo cambio la versión de la aplicación,
00:06:39
Aquí, en vez de pasar un 1, pasaría un 2, por ejemplo, en esta database. Y entonces, en vez de llamarme a onCreate, si ya existe la base de datos, llamarían onUpgrade. ¿Qué hace eso? Pues mira, te dicen, resulta que tenemos una base de datos de esta versión, que tú sabrás cuál es.
00:06:41
y ahora queremos tener y ahora queremos tener una de esta nueva versión que tú sabrás cuáles
00:07:01
porque todo es el programador pues apáñate para hacer los cartas de tables los dos tables y los
00:07:08
alterables que te hagan falta para que funcione es un soporte como veis rudimentario de versiones
00:07:13
pero bueno al menos está colocado y tienes que ir está ahí puesto como veis no tengo previsto
00:07:20
ningún on upgrade porque no tengo previsto tener más versiones de la aplicación vale como se usa
00:07:27
el sql élite pues aquí tengo mi new debe que es este señor que hemos visto antes este que me
00:07:31
ayuda y le pongo de nombre b de otro por poner algún nombre yo no sé por qué le puse este voy
00:07:37
a cambiárselo voy a ponerle solamente vd y ahora lanzamos otra vez y luego de este debe de aquí
00:07:42
pues como podéis puedo conseguir una base de datos que se pueda escribir una base datos que se pueda
00:07:52
leer pues yo cojo la que se puede escribir y aquí me lo apuntó esto es como la conexión
00:07:56
vale es la conexión abierta para ello poder hacer aquí órdenes este sqlite que por cierto que no sé
00:08:02
por qué lo tengo aquí que qué tipo tiene esto esto es un sqlite de data base vale porque es
00:08:09
como sea una secuencia de tabas a ver que tiene un sqlite de data base que es la verdad que no
00:08:14
he acordado con que tenía control extra control 20 pues esto es un sqlite de data base con un
00:08:18
control 0 pues es evita data base pues tiene begin transacción tiene compa y el statement tiene
00:08:25
delete data base delete al final que eso es que lo que más se usa pues empezar transacciones o
00:08:33
ejecutar cosas estaban por aquí los ex ex en alguna parte aquí está ese que se cuele ese que se cuele
00:08:39
con parámetros executa se cuelen que imagino es algo mismo que exec muy seguramente esto ya nos
00:08:47
tiene que sonar pues por ejemplo de acceso a datos y claro el acceso a datos es un acceso
00:08:53
a datos me imagino que estáis mirando algo como jdbc o jpa o no sé qué estáis viendo esto se
00:08:59
puede lo que pasa es que era más que nada por el tema de comandos y demás ya específicos del uso
00:09:07
en android como cada implementación tiene su método para pasar los scripts de tanto de creación como
00:09:12
añadir datos y demás, por ejemplo, para
00:09:23
creación de tablas y
00:09:25
todo eso. Si te refieres a SQL, el SQL como tal
00:09:27
es el mismo. Si te refieres a
00:09:29
los métodos... Sí, los comandos de
00:09:31
insert o create table y todo eso.
00:09:33
Eso es SQL, SQL. Entonces
00:09:35
lo normal es que casi todo te funcione.
00:09:37
Casi todo lo que sepas de MySQL
00:09:39
o de Oracle te va a funcionar.
00:09:41
Vale. Prácticamente todo.
00:09:43
Entonces, pues
00:09:46
por ahí digamos que no es preocupante.
00:09:46
Cierro esto entonces
00:09:50
y ya no sé dónde estaba, vamos a ver
00:09:51
voy para abajo otra vez, que yo estaba
00:09:53
tranquilamente, yo estoy
00:09:55
me he pasado, yo estaba aquí
00:09:57
entonces fue bueno, pues una vez que
00:09:59
tengo este, mi SQLite, que es como
00:10:01
mi connex, equivalente más o menos
00:10:03
al connection de un JDBC
00:10:05
si lo habéis dado
00:10:07
pues hago lo que yo quiera
00:10:08
con ello, por ejemplo, aquí tengo
00:10:11
un array con datos
00:10:13
súper tontos
00:10:15
que encajan
00:10:17
con esta tabla que he hecho que tiene un íntegre, un nombre y un valor íntegre también,
00:10:18
pues bueno, vamos ahora a meterlos. Me hago aquí un bucle for y lo ejecuto así.
00:10:27
Esto me gusta marcarlo porque ya os lo han contado en acceso a datos que los parámetros se pasan
00:10:35
como se pasan los parámetros. Mira, esto sí que me parece que en JDBC es con un dos puntos,
00:10:41
no interrogación un parámetro y no recuerdo manera con interrogación también pero tenías
00:10:46
que meterle luego lo de la variable lo que significaba cada uno y demás respecto a los
00:10:54
valores que se para meter no sé qué aquí como puedes ver todos los datos van en un array que
00:11:01
va sacando uno a uno va sacando uno a uno de este array pues por ejemplo la primera vuelta es esto
00:11:09
la segunda vuelta es esto
00:11:15
y la tercera vuelta es esto. Resultado, pues
00:11:16
que meto estos datos
00:11:19
en la tabla.
00:11:21
Aquí le pongo un recalcio.
00:11:23
Y automáticamente está detectando el tipo de dato, ¿no?
00:11:24
Sí, claro.
00:11:28
Sí, porque
00:11:29
sabe qué dato es el que está en la
00:11:30
base de datos, porque pasa una cosa en la base de datos
00:11:33
y luego por reflexión puede saber
00:11:35
qué tipo de cosa le llega.
00:11:37
Tú a un object le pones .class
00:11:39
o .instanceof o algo así
00:11:41
y sabes qué es.
00:11:43
Entonces, entre que sabéis lo que es en Java y sabéis lo que es en otro lado, pues él se apaña.
00:11:44
O sea, esto no lo hacemos nosotros.
00:11:48
Él se apaña, el caso es que se puede.
00:11:49
Y él se apaña.
00:11:51
Esto sería una forma, pues, como de meter datos, ¿vale?
00:11:53
¿Cómo se pueden sacar?
00:11:57
Pues con el cursor que también habréis visto, imagino, en el concepto en JDBC.
00:11:58
Tú cuando haces una query, pues te dan algo parecido a un cursor.
00:12:06
Aquí lo mismo, pues tengo una query que es... dámelo todo. El cursor, pues como JDBC, lo primero que hace es avanzarlo, o sea, dame el siguiente y hay que avanzar al siguiente hasta que se acaba.
00:12:09
Pues while moveNext
00:12:26
¿Cómo le sacan datos del cursor?
00:12:27
Pues con un get
00:12:30
GetString, getInt, getDate
00:12:31
Get lo que sea
00:12:35
Una cosa importante, me parece que es diferente
00:12:35
Respecto de JDBC
00:12:38
Es que en JDBC el primer parámetro
00:12:39
La primera columna de un cursor
00:12:41
Es la columna 1, ¿verdad?
00:12:44
Pues aquí la primera columna es la columna 0
00:12:48
O sea, que empieza
00:12:50
Como una raíz y tal
00:12:52
Aquí empieza así, mira, si vas a getString
00:12:53
Control-B
00:12:55
mira lo que pone aquí
00:12:55
intranje from 0
00:12:58
es una anotación que te indica
00:13:00
que empieza en 0, bueno también lo pone
00:13:03
también lo pone aquí en el
00:13:04
en la documentación, ¿no? pero bueno
00:13:06
aquí se ve claramente
00:13:09
que empieza en 0
00:13:11
el asunto
00:13:11
vale, y al final pues
00:13:13
como veis esto por una parte mete
00:13:16
por otra parte saca, pero ¿por dónde lo saco?
00:13:19
pues por el log.de porque no
00:13:21
tengo ganas de hacer, como es una prueba
00:13:23
así tontorrona rápida
00:13:24
no tengo ganas de hacer una interfaz en el
00:13:26
Android para que se vea
00:13:28
lo saco por el log y lo miro tranquilamente con el
00:13:29
ADB, bueno pues voy a ejecutarlo
00:13:32
vale, vamos a ver
00:13:34
este era mi ordenador
00:13:36
lo pongo que se quede
00:13:37
en more actions
00:13:40
aquí, que se quede siempre arriba
00:13:42
aunque me vaya, entonces pues le voy a dar a ejecutar
00:13:44
entonces ahí al mismo tiempo
00:13:46
voy a sacar aquí una consola
00:13:47
para este lado, esto me lo cargo
00:13:50
y voy a poner ADB logcat
00:13:52
que ya sabéis que esto saca pues todo el logcat
00:13:54
no lo voy a ver tampoco en el estudio
00:13:57
porque así es más ligerito, tengo que ahorrar memoria
00:13:59
vale
00:14:01
para quedarme solamente con lo que me interesa
00:14:02
pues voy a hacerlo
00:14:04
voy a hacer un grep prueba securite
00:14:06
porque este tag
00:14:09
que estoy poniendo, este tag
00:14:11
control B
00:14:13
es prueba securite
00:14:14
así que lo voy a mirar así
00:14:16
así lo miro
00:14:19
bueno pues
00:14:21
ahí ponen create porque está de antes
00:14:22
esto no va a pasar en cuanto aquí voy a darle a ejecutar si empieza a hacer sus cosas y a ver
00:14:24
cuándo sale de él este que tenía así que habrá que esperarse se ha cargado está instalando bueno
00:14:34
por lo primero este on create que sale aquí donde está pues está simplemente en el on create de la
00:14:54
actividad, no tiene ningún misterio ni está relacionado con SQLite. Vamos a ver lo que
00:15:02
pasa cuando doy al botón ejecuta SQLite, que hace todo lo que hemos visto antes. Plonk.
00:15:07
Bueno, pues esto es lo que sale. ¿Qué ha salido? Pues nada, se crea una base de datos
00:15:12
con nombre bd. ¿Dónde se escribe eso? Pues como llamo a prueba ficheros, control b, en
00:15:18
prueba ficheros, ah no, perdón, me he confundido, llamo a prueba SQLite, hago este db y este
00:15:24
debe lo primero que hace es decir que se crea los datos con nombre aquí está en ese constructor lo
00:15:31
siguiente que dice es he creado las tablas en un create porque porque ha pasado por aquí ha visto
00:15:39
que no existía la base de datos y la ha creado así que ha hecho aquí un creador bien y después
00:15:45
que hago pues aquí sale ejecutando este ejecutan se ejecutan este inmen esto que es cada una de
00:15:52
las vueltas que doy aquí. Aquí estoy metiendo los datos. Y aquí es donde pongo esa traza de ahí.
00:15:58
Y luego me dedico a leer en la query, pues, hola, adiós, ¿qué tal? ¿Por qué sale eso? Porque estoy preguntando
00:16:08
por id, nombre, valor, y luego estoy preguntando por la columna 1. 0, 1. Así que solamente saco la columna 1,
00:16:16
Que he metido, hola, adiós, ¿qué tal? Pues, hola, adiós, ¿qué tal? Hasta aquí ningún misterio, ¿no? Ya sabemos crear bases de datos, sabemos escribir ellas y sabemos leer. Lo mismo que puedo hacer un INSEE, pues puedo hacer un DELETE y puedo hacer un UPDATE y lo que yo quiera.
00:16:25
lo siguiente
00:16:47
ya si que tiene un poco más de misterio
00:16:50
voy a volver a darle al botón
00:16:51
ejecutar security
00:16:53
uh, que ha pasado
00:16:55
pues mira
00:16:57
que los datos ya existen
00:16:59
aproximadamente, dice
00:17:01
ha fallado no se que, y porque ha fallado
00:17:03
un unique
00:17:06
claro, normal
00:17:07
resulta que yo ya he metido
00:17:10
un 1, 2, 3
00:17:12
y resulta que
00:17:13
el id era el primer id
00:17:15
Así que como es la primary key, pues no puedo repetir el 1, ni el 2, ni el 3. Esto es lo razonable. Pillo el error aquí. Estoy pillando, aquí hago el exec, aquí se me pilló el error y digo, ha fallado. Fallará pues tres veces. Pues una, dos y tres. Pero bueno, los datos son los que había antes también.
00:17:17
Bueno, voy a intentar juntar los dos mundos ahora, el SQLite y los ficheros.
00:17:46
¿Esto dónde para?
00:17:50
Al final, esto vale, se guarda en una base de datos, pero ¿esto dónde está?
00:17:51
Pues está realmente en un SQLite.
00:17:54
Imagino que habréis probado aquí el Device Explorer.
00:17:57
Voy a quitar aquí el Android.
00:18:01
Que sale en esta pestañita por aquí abajo o en alguna parte.
00:18:03
¿Qué es el Device Explorer?
00:18:07
Pues esto es el directorio, es como el sistema de ficheros del Android.
00:18:07
De aquí dentro.
00:18:12
Es el mismo.
00:18:14
Y aquí empieza
00:18:15
Pues lo más
00:18:17
Divertido, digamos
00:18:19
¿Dónde está? Al final ese culito es un fichero
00:18:20
¿Dónde está? No sé si habéis
00:18:23
Tenido oportunidad de buscarlo
00:18:25
Seguramente, ¿no?
00:18:26
Lo estuve mirando, pero no me acuerdo dónde era
00:18:30
¿Dónde lo dejaba?
00:18:32
Bueno, pues a ver, que me he cargado esto un momento
00:18:34
Pues sí que es cierto que estuve cacharreando yo
00:18:35
Con lo de mover los ficheros
00:18:37
Para ver los errores que daba y todo eso
00:18:39
Claro, pues mira
00:18:41
Como fue hace unas semanas
00:18:42
ya le he perdido la pista.
00:18:45
O sea, es cuando se junta con la otra
00:18:47
prueba que tengo por aquí. Aquí tengo una prueba
00:18:49
que pone ficheros. Le doy y vamos a mirar
00:18:51
lo que pone, ¿vale?
00:18:53
¿Qué he hecho en eso que pone
00:18:56
ficheros? Pues, como estáis viendo,
00:18:57
aquí trasteo yo con las
00:18:59
llamadas que vienen en la
00:19:01
en la
00:19:02
teoría, ¿no? Con el getExternal
00:19:04
storagePublishDirectory,
00:19:07
storageDirectory, getAttaDirectory
00:19:08
y getExternalFilesDir.
00:19:11
¿Qué hace este primero? Bueno, pues la verdad es que se ha complicado un poco con las versiones de Android según ha ido pasando el tiempo, porque antes cuando tú tenías un Android venía sin tarjeta, luego el Android podía tener una tarjeta, luego el Android podía tener varias tarjetas, luego el Android, el aplicativo tenía una tarjeta y si no tenía una tarjeta se emulaba dentro de la memoria normal del Android.
00:19:15
el resultado que tenemos ahora es que un android siempre piensa que tiene una tarjeta aunque
00:19:36
generalmente esa tarjeta está en la memoria que no es tarjeta que la interna y luego se
00:19:44
pueden poner tarjetas de verdad adicionales es un es un desastre el punto de vista que te da
00:19:50
este directorio este este la llamada te da esa tarjeta que siempre tiene que estar por defecto
00:19:59
Siempre tiene que haber una tarjeta.
00:20:07
Aunque no tengas tarjeta.
00:20:08
Yo os prometo que ahora mismo el teléfono que tengo no tiene tarjeta.
00:20:09
Pero este me da un directorio.
00:20:12
Vais a ver.
00:20:14
El external storage que me da.
00:20:15
A ver dónde estaba.
00:20:18
El external storage que me da es barra estoraje, barra emulate, barra cero.
00:20:19
Os creéis, me imagino con esto, que es que no hay tarjeta.
00:20:25
Es emulada la tarjeta.
00:20:29
Pero tiene que estar.
00:20:31
Porque si no, Android no funciona.
00:20:33
Se piensa que siempre tiene una tarjeta. Si tuviera tarjetas de verdad, ¿dónde saldrían? Aquí. Me saldrían en Get External Files DIRS. Saldría aquí. No sé si tenéis un teléfono de votos con tarjeta o sin tarjeta. No tengo ni idea.
00:20:34
Yo tengo uno con tarjeta. Entonces yo tengo dos directorios de imágenes, dos directorios de double loads, porque un directorio está en la tarjeta emulada y otro está en la tarjeta de verdad.
00:20:48
Entonces, este de aquí, esta llamada, que devuelve un file corchete, o sea, un array de files, te da todos esos directorios. Si tienes una tarjeta, pues te da dos.
00:21:01
Si no tienes tarjeta, solo te da el de las emuladas. Como estoy sin tarjeta ahora mismo, external files disparados. Aquí está. Solamente me da uno, que está en estoraje, emulate, cero, Android, data, pruebas de codete, download.
00:21:11
haz estos son mis los ficheros de mi aplicación porque este es mi aire son los ficheros de mi
00:21:26
aplicación donde en teoría yo tendría que bajarme los ficheros según lo que opina android y aquí
00:21:34
podría abrirlo cerrarlo y esas cosas los ficheros aquí no sé si he dejado algo más claro o menos
00:21:42
claro que antes ahora mismo vale este directo los que te da este señor de aquí no son para
00:21:49
compartir con otras aplicaciones los que te da este de aquí si son para compartir con otras
00:21:55
aplicaciones sería el referente a la tarjeta sd de la tarjeta sd en la que siempre tiene que estar
00:22:00
y por otro se comparte esto también hay gente que llama también sárez no sé qué si lo miráis
00:22:07
para estoraje barra mula 30 lo hace esto no es particular de mi aplicación aquí es donde la baja
00:22:13
por ejemplo el firefox las cosas entonces pues no es particular para mí esto está compartido
00:22:20
bueno pues porque esto lo junta con ese culite porque me dice dónde están mis bases de datos
00:22:27
y bases de datos están en get data directory están aquí que ahora es un poquito decepcionante porque
00:22:35
pone barra data vamos a buscar en barra data pues voy a ver ya pues vengo aquí busco data
00:22:42
que aquí empezaba a decir y por dónde anda esto está por aquí lo que será en app pues fallaste
00:22:53
no sé si vale no sé por qué pero no lo ponen aquí es en data data y veis aquí tengo suerte
00:23:01
me llamo a gonzález estoy el primero pincho aquí tengo un texto de databases y aquí tengo a ver
00:23:09
porque hay muchas cosas por hecho muchas pruebas la base de datos que acabo de hacer ahora es como
00:23:15
la llame perdón la llame vd pues es esta esta es la base de datos 16 cas esta me la voy a cargar
00:23:20
a la que no me da nadie, me las cargo ya
00:23:28
a esta, fuera
00:23:31
y lo acabo
00:23:32
¿y la journal qué sería?
00:23:35
esto es un fichero que es
00:23:37
propio de SQL, seguramente si apago
00:23:38
la aplicación se borre
00:23:40
o se quede
00:23:42
el journal es el... ¿se habéis dado
00:23:44
los ficheros del ojo?
00:23:46
sí, o el fichero de bloqueo
00:23:49
pues a lo mejor uno de esos
00:23:51
el que está en uso
00:23:52
no es el que está en uso, el journal es
00:23:54
sin verlo, el concepto de
00:23:57
Journal en base de datos es operaciones
00:23:59
que están pendientes de grabar, que aún no se han grabado
00:24:01
en la base de datos de verdad.
00:24:03
Que se ponen aparte para no molestar
00:24:05
a otros. Y luego ya se...
00:24:07
Es un fichero temporal, pero
00:24:09
permanente. O sea, siempre está aquí
00:24:11
para pegar al otro. Si te das cuenta
00:24:13
tiene cero bytes, pues porque como está todo
00:24:15
no hay pendiente nada, pues está grabado en el otro sitio.
00:24:17
Vale. ¿Cómo sé yo
00:24:20
que esto es una aplicación de...
00:24:21
Es fichero de base de datos. Aparte de porque está en el
00:24:23
directorio, databases y se llama como yo lo he llamado, que ya da pistas, ¿no? Pues me lo puedo bajar, botón derecho, save as y pues lo voy a poner en el escritorio para que moleste.
00:24:25
A ver, home, Álvaro, no, toca abrirlo otra vez. ¿Qué de cosas tengo, por Dios? Pues en el escritorio. Pues aquí dice que ya lo ha grabado, pues lo voy a abrir.
00:24:37
¿Cómo se abre un fichero de SQLite?
00:24:57
Pues con lo que puedas
00:24:59
Voy a cargarme el ADB Logcat
00:25:00
Y me voy a ir a mi escritorio
00:25:03
Desktop, aquí tengo un montón de cosas
00:25:04
Pero bueno, también tengo el
00:25:07
El DB
00:25:08
Que me acabo de bajar, ¿no?
00:25:10
O BD
00:25:13
BD, aquí lo tengo, me lo acabo de bajar
00:25:13
16K
00:25:17
Además justito, se ve que va por páginas
00:25:17
El SQLite, ¿cómo se puede ver?
00:25:20
Bueno, pues
00:25:23
Yo tengo instalado directamente
00:25:23
en la aplicación SQLite 3
00:25:26
que vale, que es
00:25:29
un cliente de SQLite
00:25:30
que es de línea de comandos
00:25:33
como SQL Plus
00:25:35
o como MySQL Client
00:25:35
pues eso, pues nada
00:25:39
aquí lo tengo, BD
00:25:40
pues, ¿qué tablas hay?
00:25:42
esto a lo mejor, esto es una cosa
00:25:44
particular de SQLite que he buscado esta mañana
00:25:46
punto tablas, pues me dice que hay
00:25:48
estas dos tablas, Android Metadata y
00:25:50
tabla, que tabla es la que yo
00:25:52
he creado, ¿vale? Tabla está
00:25:54
aquí.
00:25:56
Tabla es la que yo he creado.
00:25:59
Pues nada,
00:26:01
¿cómo se hace ahora?
00:26:02
Columns, esta mañana lo he hecho, ya no me acuerdo.
00:26:05
A ver si estará por aquí.
00:26:07
¿Estará por aquí? ¡Uh! No está.
00:26:09
Pues esta mañana yo le he preguntado
00:26:11
dime las columnas
00:26:13
que tiene y me se va a decir las columnas que tenía.
00:26:15
Claro que eso ya será
00:26:19
el lenguaje de la propia...
00:26:20
Tabla...
00:26:22
no me acuerdo
00:26:24
había una forma que te decía
00:26:26
mira, esta tabla es así, pero ya no me acuerdo
00:26:29
au cd
00:26:31
changes clone databases
00:26:33
dum echo excelex
00:26:34
schema
00:26:37
es esquema
00:26:45
tabla, pues me dice
00:26:48
que se crea así la tabla
00:26:50
o sea que aquí veo como está hecha la tabla
00:26:52
la tabla es así, pues nada
00:26:54
se le da este disco from tabla
00:26:56
pues aquí están los datos
00:26:58
esto nos demuestra que este es el fichero de base de datos que de ese culite que está haciendo el
00:27:00
android por dentro vale si yo tuviera creo que también yo ahora podría modificarla aquí y subirlo
00:27:08
hacia arriba para ver qué también vamos a ver insert in tu tabla esto no lo hecho nunca vamos
00:27:14
a probar voy a meter el valor 10 con aquí con desde fuera lo voy a llamar y otro valor aquí
00:27:18
que tampoco importa a 10 aparte hay que poner valores así esto creo que se cuele a ver pues
00:27:27
nada aquí habrá que hacer comita vale no hay comidas seres hasta isco from tabla pues ya
00:27:36
está pues exit exit control c control de vale a ver si lo grabado porque no controlo yo esto
00:27:44
select a stage cofront tabla pues aquí está pues creo que ahora puedo subirlo aquí arriba a ver
00:27:52
qué tal vamos a ver si lo consigo subir primero voy a apagar la aplicación porque es como está
00:28:01
en uso y tal por lo normal es que si le cambio los ficheros pues se rompa algo a ver como lo
00:28:07
mato hay por dios aquí a la spa ya la he matado voy a matar voy a borrar me esto me está preguntando
00:28:13
Sí, delete. Me lo he cargado y ahora me imagino que lo podré subir. Me imagino, a ver, porque si no, ¿para qué quieren? A ver, entonces, en el desktop, esta BD, a ver si la puedo descargar. Uy, que desagradable, ¿no? Bueno, aquí tengo un Upload. Pues nada, en el desktop hemos creado que había un BD.
00:28:22
no es que sea una raza de soltar pero se puede casi lo prefiero así falló menos voy a arrancar
00:28:46
la aplicación a ver qué pasa vengo aquí prueba de permisos y entonces voy a poner esto aquí al
00:28:56
lado y al mismo tiempo voy a poner el logcat para que nos dé pistas de qué está pasando
00:29:04
aquí está todo esto lo de antes si ves la fecha si ves la hora es lo eso fue hace un rato ya
00:29:11
Entonces, voy a darle aquí a ejecutar ese culite, a ver qué se le ocurre. Bueno, pues como veis ha vuelto a fallar porque tiene todos los datos de antes, pero fijaos, este lo he metido desde fuera, no lo he metido con la propia aplicación.
00:29:15
O sea, que puedo meter y sacar los datos que yo quiera con ese culite. Tomía no lo ha dicho nunca, se puede. Qué suerte. Vale, pues creo que con esto acabo de contar lo que quería contar de ese culite, que es por lo que me has preguntado más o menos.
00:29:33
No sé si te ha quedado alguna zona todavía oscura o...
00:29:54
No, por ahora no.
00:29:57
Vale.
00:29:58
Bueno, pues...
00:29:59
Si nos metemos en meollo de tema de...
00:30:00
¿Cómo sería?
00:30:06
Programación orientada a objetos, sobre base de datos y toda la historia,
00:30:10
eso ya...
00:30:13
Bueno, eso ya sería...
00:30:14
Eso ya es más complejo.
00:30:15
Eso es acceso a datos.
00:30:16
Eso justamente es acceso a datos.
00:30:18
Aquí se podía poner un ORM que funcionase encima de ese culite.
00:30:20
hombre, le quita un poco la gracia porque se eligió
00:30:24
SQLite porque era ligerito y facilito
00:30:26
para los teléfonos
00:30:28
que están siempre limitados
00:30:30
si le metes ahí un montón de cosas pues
00:30:31
no es lo que tenía pensado
00:30:34
que lo hice
00:30:37
y luego sé que hay aplicaciones
00:30:38
que tienen su base de datos en SQLite
00:30:42
o utilizan
00:30:44
ficheros, ¿vale? por ejemplo
00:30:46
y luego esa información la
00:30:48
sincronizan con un servidor de base de datos
00:30:50
que puede ser
00:30:52
un oracle o
00:30:53
alguna silla más grande en el cual ya se
00:30:55
hace persistente
00:30:57
esa información.
00:30:59
¿Eso?
00:31:01
Pues con mucho trabajo, porque
00:31:03
que yo sepa, no hay ninguna
00:31:05
librería que te lo haga,
00:31:06
que yo sepa. Lo que hay es que directamente
00:31:09
si no usas
00:31:11
SQLite, a lo mejor usas SQLite
00:31:13
por debajo, pero lo que son servicios
00:31:15
completos. O sea, en vez de haber un oracle
00:31:17
por ahí en internet, te venden
00:31:19
bases de datos con
00:31:21
librerías
00:31:23
que tú accedes directamente
00:31:25
a esa base de datos siempre
00:31:27
por red, evidentemente
00:31:29
pagando dinero, ¿vale?
00:31:31
El desarrollador paga dinero y tiene ahí
00:31:33
una clave
00:31:35
y tal y cual que le metes en la aplicación
00:31:37
y que si la librería
00:31:39
es efectivamente lista, cuando no hay conexión
00:31:41
lo escribe en local hasta que
00:31:43
luego cuando hay conexión se sincroniza.
00:31:45
Pero no es con un oracle o no es
00:31:47
un SQL, es
00:31:50
Esa base de datos particular con su forma particular de trabajar. ¿Cuál conozco yo? Pues Firebird. Firebird es justamente eso. A ver, no, Firebase. No, es que es Firebase, perdón. Es Firebase que la compró Google porque había mucha gente que la utilizaba para Android.
00:31:51
Pues esto es más o menos lo que tú me has contado
00:32:19
Pero claro, es no SQL
00:32:22
O sea, empieza a decirte que es no SQL
00:32:24
Son asedatos, que se guarda
00:32:26
Gasol, lo que tú quieras, que cuando no hay
00:32:28
Conexión
00:32:31
Se sincroniza después
00:32:32
Cuando la tiene
00:32:34
Pero no es Oracle
00:32:35
No es SQLite, no es MySQL
00:32:38
Es esto, y se paga
00:32:40
Tiene una parte gratis, pero luego se paga
00:32:42
Y hay alternativas, pero vamos, ya buscando por aquí
00:32:44
Alternativas a fin de base
00:32:46
y ya lo que te diga internet.
00:32:48
Vale.
00:32:50
¿Dudas?
00:32:55
Resulta.
00:32:56
Pues arreglado.
00:32:57
Uy, si somos más gente ya.
00:32:59
¿Alguna cosa?
00:33:05
Claro, de ficheros no cuento nada.
00:33:06
¿Por qué?
00:33:07
Porque de ficheros no hay que contar nada.
00:33:08
Es de primero.
00:33:10
No es que sea despectivo.
00:33:12
Es que es de primero.
00:33:13
Una vez que ya tienes el file,
00:33:14
pues tú ya te puedes hacer tu file output string,
00:33:15
que creo que funciona.
00:33:17
Y si no, pues con los métodos que vienen por ahí en la documentación para hacer ficheros, pues te dan un input o un output stream que tú puedes convertir a tu reader para poder leer caracteres o a tu writer para poder escribir caracteres, como se contó en primero o se debería haber contado en primero.
00:33:18
imagino que sólo tenéis qué vale pues por eso no es que sabéis que el problema es saber en qué
00:33:37
directo después escribir pero como directo después escribir son los que han salido antes cuando de
00:33:47
afichar estos son los directores se pueden escribir pues arreglado no y bueno y en punto
00:33:52
barra también que se guarda al final donde hemos visto si escribes en punto barra pues acabas
00:33:59
estando yo diría aquí un fichero en punto barra está ahí en ese directorio
00:34:05
y lo de prueba ficheros pues voy a hacer un fichero vamos a ver si se podrá con directamente
00:34:14
con file output stream, vamos a ver
00:34:24
new file
00:34:26
output stream
00:34:28
punto barra
00:34:30
hola
00:34:33
no, a ver, igual me hace falta
00:34:36
importar algo
00:34:38
ah, que tengo que
00:34:39
hacer un try catch, claro
00:34:44
pues try
00:34:46
catch
00:34:48
en la vida real no pongáis
00:34:52
probable, habría que poner la
00:34:55
sección que es, pero es que así lo pillo
00:34:57
todo y no se me escapa nada en las pruebas
00:34:59
vale, pues nada, no puedo hacer el fichero, y esto pues me lo voy a hacer aquí, una línea menos, le doy a ejecutar otra vez, y ahora probamos a ver que tal, vale, voy a probar con ficheros, no sé si se ha roto algo, vamos a mirar, aquí pone no puedo hacer el fichero, uh, que mal rollo, no, no lo ha hecho, pues mira, no funciona, yo me imaginé que funcionaría, porque a veces funcionan estas cosas, pero no funciona,
00:35:01
Pues habrá que hacerlo con lo que nos obligan, con el contexto. Pues nada, dis.create, no, ¿cómo era? ¿Era open? Si os acordáis, si no, tendré que buscarlo. Pues lo tengo que buscar. Pues buscamos. A ver, ¿cómo hacías?
00:35:57
Es un almacenamiento externo, almacenamiento interno, OpenFileOutput.
00:36:19
No me acordaba.
00:36:30
Si lo tenía aquí ya, ¿cómo se...?
00:36:32
Si le digo a dar a control espacio, OpenFileOutput, pues nada, el fichero que queríamos llamar fichero.
00:36:36
Y luego este de aquí que hay que poner, IntMode.
00:36:46
Pues a ver qué me dice este señor.
00:36:49
con texto de private vale
00:36:51
vale multiproces vale pues lo voy a hacer con apenas para ir añadiendo si
00:37:02
hiciera falta solamente con esto se tiene que crear ya no me lo voy a guardar siquiera
00:37:10
debería crearse con esto de nuevas
00:37:15
sacó la consola para cuando éste tenía que decirle que que si ponga ficheros
00:37:19
ahora nos ha quejado de nada eso quiere decir que ha funcionado he creado un fichero por lo
00:37:47
voy a mirar vengo aquí a files y le digo generalmente la gente lo llama refrescar
00:37:52
aquí ya más sincronizar pues aquí tengo mi fichero de 0 bytes que acabo de crear este
00:37:57
señor me devuelve un output string vamos a ver control b este señor como veis me da directamente
00:38:04
un file output stream y si queda un stream pues nada y con el file output stream pues ya hacemos
00:38:12
lo que queramos hacer que hacíamos en el primero lo normal pues si es binario dejarlo ya como está
00:38:16
y escribir bytes o si es de texto pues hacer sobre esto un writer y escribir cosas con el writer
00:38:23
como antes
00:38:31
como con las bases de datos
00:38:34
una vez generadas las bases de datos
00:38:36
pues ya cambiamos de módulo y ya no lo cuento yo
00:38:38
ya lo cuenta el siguiente
00:38:40
imagino que me dejarán hacer directorios
00:38:42
ya que estoy
00:38:48
¿puedo hacer directorios?
00:38:49
si no recuerdo más creo que si te permitía
00:38:54
vamos a ver
00:38:56
voy a probar a hacer directorios
00:38:58
acá me va a preguntar
00:39:04
ahora sí sí sí sí no me preguntes más ficheros pues no hay que hacer el directorio antes o no
00:39:06
se puede hacer directorios no ha funcionado directamente no tienes que crear primero el
00:39:25
fichero o sea el director pues no lo veo claro era con otro comando estoy mirando a ver si lo
00:39:30
encuentro pues pues yo diría que no se puede hacer directorios así a bote pronto porque no
00:39:43
vamos a haberlo leído a mira que es fiel es decir que decir de decirle a crear un directorio get
00:40:00
get yo la verdad es que si quiero crear un directorio lo llamado
00:40:11
créate, no lo había llamado get
00:40:17
pero oye, mira
00:40:20
que se le va a hacer
00:40:20
que se le va a hacer, pues ahí está
00:40:23
get dir name, pues sería
00:40:25
el dir
00:40:27
o con barra delante
00:40:28
claro, a lo mejor es que lo he hecho mal porque he puesto
00:40:31
una barra delante
00:40:33
bueno, pues nada, dir y aquí hay que poner
00:40:34
un mode, que el mode cual es
00:40:37
control B
00:40:39
que misterioso
00:40:41
mode
00:40:44
es un file mode
00:40:45
y el file mode es
00:40:50
no me dicen que es
00:40:52
un file mode
00:40:54
pues ahora está bien que me dijeran que es un file mode, ¿verdad?
00:40:55
control B
00:41:08
vale, pues aquí están los file modes
00:41:09
los de antes
00:41:13
mode private, mode no sé qué, pues
00:41:14
pues
00:41:16
private
00:41:20
este mismo
00:41:23
a lo mejor cero también varía
00:41:35
bueno, pues digo yo que ahora funcionará
00:41:37
Voy a decirle que no me pregunte más
00:41:39
Para que no me pregunte más
00:41:48
¿Picheros?
00:41:50
Pues dice que no se puede hacer de pichero
00:42:03
Y me estoy quedando sin pilas
00:42:05
Voy a enchufar primero el portátil
00:42:08
Y luego miro a ver qué ha pasado
00:42:14
Vamos a ver
00:42:16
Pues enchufado ya está
00:42:19
Y ahora
00:42:32
No, este no es
00:42:34
Este que me he quedado sin brillo
00:42:36
Y ahora, pues voy a ver si me ha hecho el directorio o qué ha hecho. Vamos a ver, sincronizar. Pues no, ha hecho el dir. Lo que me extraña... Ah, bueno, es que soy un poco... A ver, tenía que haber puesto la excepción para saber dónde ha fallado.
00:42:38
eso ya habéis visto, parece que no puedo hacer el fichero
00:43:08
porque tiene un separador
00:43:40
bueno, pues nada, var
00:43:41
el directorio
00:43:44
dir punto
00:43:46
y ahora, ¿cómo creo yo aquí un fichero?
00:43:49
a partir de aquí
00:43:52
porque esto es un file, ¿cómo lo hago?
00:43:52
file output
00:44:15
claro, ¿para qué me vale
00:44:16
para qué me
00:44:20
vale el directorio
00:44:25
si no puedo hacer
00:44:27
un fichero ahí dentro?
00:44:29
Vale, ya has hecho el file. Tendrías que hacer un file poniendo getExternalStorageDirectory y luego le tienes que decir el nombre del directory. Luego al file le pasas mkdir.
00:44:30
Sí, sí, no. Si lo veo más o menos claro. Lo que no veo es luego cómo abro un fichero ahí dentro.
00:45:25
Si yo me hago ahora un file, un new file, que le pongo como padre este dir y le pongo autonómico, por ejemplo, subdir, no sé si te refieres a algo así, y le digo mk, a ver, que file no lo he importado, perdón, import class.
00:45:33
y le digo
00:45:55
mkdeals
00:45:56
así creo los directorios
00:45:59
sí, sí, seguramente
00:46:02
esto funciona
00:46:03
y luego para hacer el open file output
00:46:04
que sería para crear el fichero
00:46:08
seguramente tendrías que poner en el nombre
00:46:09
punto
00:46:11
barra dir
00:46:13
barra fichero
00:46:15
pues voy a probar
00:46:16
voy a probar, pero no creo que funcione
00:46:19
a ver, launch, pues otra vez
00:46:21
Porque lo que me ha dicho es que había un nombre que no se podía poner a un fichero porque era un separador de directorio.
00:46:23
Entonces, me extraña.
00:46:28
Que acceda dentro del directorio de alguna manera y que lo genera ahí.
00:46:32
Claro, lo que tengo la impresión es que a lo mejor lo que tengo que hacer es un file output stream directamente dentro del...
00:46:36
A ver, este, vamos a ver.
00:46:45
var subdir.
00:46:47
entonces un file.stream que lo hago en el new file, subdir y así lo llamo fichero, y aquí tengo que poner new, no sé por qué esto no me gusta, ¿por qué no te gusta?
00:46:49
Ah, espérate, claro, sí, es que aquí he puesto mkdir. Subir mkdir. Entonces, ahora esto ya debería ir mejor y yo creo que a ver si hay suerte y esto sí que funciona.
00:47:11
O sea, volver al file potenciando toda la vida en vez de este, que simplemente lo que hace es llevarte hasta el sitio. Esperemos que sea así, porque si no, no sabría ahora mismo cómo hacer subdirectorios.
00:47:29
Bueno, algo ha cascado
00:47:41
Pero ya veremos el qué
00:47:45
Ha cascado en la 202
00:47:46
Que la 202 es aquí
00:47:50
Ha cascado esta
00:47:52
Pero la anterior ha funcionado
00:47:54
O sea que es que al final
00:47:55
Cuando tienes el file ya utilizas
00:47:57
Lo normal de Java
00:47:59
Vamos a ver, sincronizar
00:48:00
Sincronizar
00:48:03
No he visto yo que aparezca ese directorio
00:48:06
Sincronice
00:48:10
Bueno
00:48:13
Pues a cascar la 202
00:48:15
El casco es
00:48:17
En mi línea
00:48:20
En la 202
00:48:22
Lo que quiere decir que ha pasado
00:48:23
Por las anteriores, o sea que esto lo ha hecho
00:48:26
¿Y si
00:48:28
Te está dando error porque
00:48:30
Espera alguna especie de array
00:48:32
Con el mkdir
00:48:34
Y que sea mkdir sin la s del final?
00:48:36
No, mkdir es hacer el último
00:48:38
Directorio y mkdir es hacer todos los directorios
00:48:40
Ah, vale, vale
00:48:42
Es como mkdir en la línea de comando
00:48:44
Y mkdir menos p
00:48:46
¿Vale? Pues la verdad es que esto
00:48:47
Es un poco un misterio porque
00:48:50
No ha hecho
00:48:52
O sea, esto no lo ha hecho
00:48:59
O sea, ha pasado por aquí
00:49:00
No ha fallado
00:49:03
Y luego ha pasado por aquí
00:49:04
No ha fallado
00:49:07
Y ya falla aquí abajo
00:49:08
Es algo sorprendente
00:49:11
Me ha parecido ver que te ha aparecido
00:49:13
una carpeta llamada appdir
00:49:16
no sé si la has creado tú ahora
00:49:17
Dios mío, pues sí, aquí está
00:49:21
O sea, te crea
00:49:23
una carpeta por cada aplicación
00:49:25
o como diciendo, vale, esta aplicación
00:49:27
necesita una carpeta, pues se la meto en otro sitio
00:49:31
completamente diferente a todo lo anterior
00:49:33
y ya está
00:49:35
Esto es, el concepto
00:49:36
de esto, la verdad es que a mí no me sorprende
00:49:39
porque yo he pasado ya por algunos sitios, como por ejemplo
00:49:41
había hace muchísimo tiempo, antes de las
00:49:43
berries, pues también tenían
00:49:46
el concepto de almacenamiento
00:49:48
llevado por el sistema operativo
00:49:50
y no por ti. Había ficheros
00:49:53
y directorios, por supuesto, pero te dejaban
00:49:55
escribir solamente donde se podía escribir
00:49:57
según ellos y no en ningún otro sitio.
00:49:59
Algo parecido le pasa
00:50:01
muy similar a las aplicaciones
00:50:02
de Mac si no hacen cosas raras.
00:50:05
Entonces, pues no me sorprende
00:50:07
que tú le digas que quieres hacer un fichero
00:50:09
y ahí viene el directorio porque se acabó
00:50:11
y que le digas que quieres hacer un directorio y yo pago donde él quiera.
00:50:12
No me sorprende nada.
00:50:15
Me sorprende dónde lo ha puesto, pero no que lo ponga donde él quiera. No me parece normal todo. No sé si me explico.
00:50:18
Bueno, pues ahí está. Hombre, la gente en general no suele dedicarse a hacer muchos ficheros de estos. Me explico.
00:50:33
Si tu aplicación lo que tiene son datos que quiere guardar y tal, lo normal es que lo guardes en una base de datos que está estructurado y es más fácil. Si tu aplicación tiene datos que tiene que compartir con los demás, pues lo pone en el directorio compartido, que ahí sí te dejan hacer los ficheros que tú quieras, donde tú quieras.
00:50:42
que tu aplicación tenga ficheros sueltos
00:50:56
escondidos que nadie ve
00:51:00
pues a lo mejor te ocurre
00:51:02
si
00:51:04
eres, como se dice esto
00:51:04
es una aplicación que ya era de escritorio
00:51:07
y ahora están pasando a Java
00:51:10
o a Android o algo así
00:51:11
pero una aplicación nueva, lo normal es que no use ficheros
00:51:13
así que
00:51:17
que no use ficheros
00:51:18
digamos internos privados propios
00:51:21
en este directorio
00:51:23
Es lo normal, porque tienes alternativas mejores. Tienes la base de datos ya bien hecha y luego, en general, todas las aplicaciones, como quieren guardarlo o algo en Internet, pues lo guardan en Internet.
00:51:24
Entonces, esto no suele ser... Yo creo que no se usa. Y luego, si tienes recursos de aplicación, como yo que sé, si quieres poner iconos o quieres poner texto, ya sabéis que va en la carpeta de REST, en el RAW o donde sea, y tampoco va aquí.
00:51:38
entonces pues no suele haber mucho fichero de estos no suele a todo esto ahora que estamos
00:51:50
estoy diciendo que no suele pero dónde están los ficheros de una aplicación que yo tengo que se
00:51:59
llama termos ahora debe estar dando a mí la duda que no sé cómo se llama con termos con termos a
00:52:04
ver cómo lo hacen no puedo verlos no puedo verlos porque no tengo la prueba
00:52:13
gustaría verlos no tengo no tengo permisos por lo que sea para ver los directorios pues nada
00:52:26
se lo voy a preguntar a la propia aplicación porque es que es una aplicación que sí que
00:52:37
usa ficheros bastantes porque es un emulador de linux digamos entonces su vida son los ficheros
00:52:41
de data data con termos pues no me han dejado verlo y aquí sí que hacen directorios lo veis
00:52:47
pues es que me sonaba a mí files home aquí si los tienen data data pero es data es que me ha dado
00:52:55
a talata mt con termos ya llegaré tras pasar termos para no no me dejan mirar porque no estoy
00:53:05
jugando lo no me dejan mirar ahí bueno lo que tengo que mirar tiene sentido así no puedo
00:53:23
darle datos a whatsapp por ejemplo tiene sentido vale pues se ve que se puede de alguna forma que
00:53:30
yo no sé cómo es pero se ve que se puede no me interesa porque alternativas mejores para
00:53:37
hacer aplicaciones a lo mejor directamente pero posiblemente si hago simplemente un directorio en él
00:53:42
y le a ver data data cuál era data data
00:54:01
dale prueba ese culite
00:54:20
y les subir posiblemente ya hago esto sin más sí que funciona pasa que esto ya se repite
00:54:26
Entonces, pues no le pongo aquí var y ya está. Vamos a ver. He fallado. ¿Qué he hecho mal?
00:54:45
No has puesto nombre de la variable.
00:55:17
Exactamente. Pues una sin usar y a ver qué pasa ahora. Ficheros, falla en la línea 206, que la 206 es esta, pero esta otra ha funcionado, así que imagino que habré hecho el directorio donde yo quería.
00:55:20
Pues así se hace un directorio.
00:55:54
Ya está.
00:55:55
Te sabes el sitio y lo escribes.
00:55:56
Ya se puede hacer.
00:55:58
Qué desagradable.
00:56:00
Alguna forma mejor habrá, imagino.
00:56:02
Seguro.
00:56:05
Hombre, a ver, ¿qué ocurre?
00:56:06
Este data te lo da esta llamada al sistema.
00:56:06
Este otro data, pues te lo puedes saber.
00:56:13
Este es mi ID, que lo puedo sacar del context.
00:56:16
Este files también es una cosa fija.
00:56:19
Así que, aunque es desagradable, tampoco es tan falto de sentido.
00:56:22
Bueno, pues ya está. Suficiente por files, si no me preguntáis más cosas.
00:56:31
¿Las aves preferencias las lleváis bien?
00:56:36
Que al final...
00:56:40
Bueno, ya las miramos en su momento cuando miramos los vídeos.
00:56:43
¿Os acordáis?
00:56:48
Sí.
00:56:50
Pues las áreas preferencias es la forma que tiene Android de darnos algo rapidito
00:56:50
Bueno, una de las cosas que nos da para hacer algo rapidito, que corra mucho y que se pueda llevar en casi todas partes
00:56:58
Por ejemplo, en el OnCreate están preparadas las áreas preferencias para cuando te apagas y te enciendes
00:57:05
A ver, me explico
00:57:13
Todo Android está orientado alrededor de que las aplicaciones se pueden matar en cualquier momento
00:57:14
el proceso te lo pueden matar
00:57:20
entonces está pensado teóricamente
00:57:23
para que en cualquier momento cuando te llamen
00:57:25
tú rápidamente puedas aparentar
00:57:27
que ni siquiera te han matado
00:57:29
te recompones rápidamente y ya está
00:57:30
entonces hay un sistema que es
00:57:32
el bundle este
00:57:35
que está bien, el bundle
00:57:36
pero hay otro que es el
00:57:38
sabes preferencias, que tiene gracia
00:57:40
porque en algún, ¿por qué lo estamos contando?
00:57:43
porque en algún momento esta se podía compartir
00:57:45
entre aplicaciones, se llamaba
00:57:47
ser y además estos señores podrían tener más de un más de un tipo de esas preferencias se puede
00:57:48
tener esas preferencias con un nombre más de uno las versiones modelas ya te dejan compartir con
00:57:58
otras aplicaciones así que esa parte se ha quitado pero bueno sigues teniendo un sitio que es como
00:58:04
un fichero punto y ni clave valor clave valor clave valor o sea un nombre un valor y por aquí pues un
00:58:08
nombre un valor bueno aquí cuando ese valor es el valor por defecto si no estuviera grabado
00:58:15
pues es que no tiene más historia es supuestamente un sistema rápido para
00:58:22
cuando te arrancan rápidamente parecer como que no te han matado y disimulan
00:58:30
y te dejan guardar como un fichero punto y ni clave igual a valor clave igual a valor
00:58:36
un hasón de solo un nivel
00:58:40
no tienen más historia
00:58:44
tú consigues un sales preferencias
00:58:54
te las sacas del contexto como siempre
00:58:59
ya solamente pueden ser privadas
00:59:02
no os preocupéis de poner aquí
00:59:05
no os preocupéis de poner una cosa en esa privada
00:59:08
porque ya no puede ser privada
00:59:13
Ya tiene que ser privada. No puede ser pública.
00:59:14
Y una vez que las... Ah, bueno, me falta contar una cosa. Es cómo se modifican.
00:59:20
Eso quizá no lo he... Eso habría que aclararlo.
00:59:23
¿Cómo se modifica? Bueno, pues para leerlas, ya habéis visto.
00:59:26
Ah, no, esto es para escribirlas. Para escribirlas, pues...
00:59:29
No puedes escribirlas tal cual. Tienes que sacar un editor de ellas.
00:59:34
O sea, habrás preferencias y puedes preguntar por qué valor.
00:59:38
Pero para escribir tienes que conseguir un editor.
00:59:41
La gracia del editor es que hasta que no se hace commit no se graba todo, como una transacción de base de datos. ¿Por qué hacen eso? Es algo parecido a que si tienen miedo de que entre que empiezas a modificar y acabas de modificar, que entre medias tu aplicación falle y casque y se muera.
00:59:43
Se quedaría la aplicación en un estado inconsistente
01:00:03
en el que se han grabado unas cuantas cosas
01:00:05
y otras no, y no se sabe muy bien si van a funcionar.
01:00:06
Así que, para estar seguros de que eso no ocurre,
01:00:09
en este commit ya se graban.
01:00:11
Y no antes.
01:00:14
Así que, en vez de tener unas aves preferencias,
01:00:16
en vez de las preferencias tener un get boolean,
01:00:19
pues hay que poner edit, put in, commit.
01:00:22
Hay que hacer eso.
01:00:25
De hecho, voy a ver qué devuelve el put in,
01:00:28
porque si el put in, control alt, control n, y voy a ver el edit, control 0, edit, devuelvo un editor, y el editor, voy a saltar el editor con control b,
01:00:30
se puede encadenar, como veis el put string devuelve un editor, así que puedes ponerle punto put string set y devuelve un editor,
01:00:55
y al final de todo por el commit se puede abreviar en una línea al final todo esto se
01:01:01
puede abreviar en una sola línea lo voy a escribir por aquí control c por ejemplo aquí mismo lo voy
01:01:07
a escribir pues eso que hemos visto en pinta de java pues esto se podría haber abreviado como
01:01:13
edit put in y luego poner aquí commit y no está de falta esta variable de aquí según gustos ahora yo
01:01:23
lo pondría pues pues posiblemente así le hemos puesto este putin pues podrías haber puesto luego
01:01:36
os puedes poner aquí un put string
01:01:45
este no le saco de por ahí
01:01:54
este le pongo directamente un valor
01:01:57
una clave y aquí le pongo directamente
01:02:02
un valor, se pueden encadenar
01:02:06
estas llamadas porque si vienen de un editor
01:02:10
hasta el final, hasta commit
01:02:13
así que tampoco es tan
01:02:14
engorroso
01:02:17
el edit
01:02:19
bueno, pues a ver que nos queda
01:02:20
hemos visto, oficiales compartidas
01:02:24
oficiales externos, ese culite
01:02:30
y nos falta la cohesión por red
01:02:32
bueno, espérate, la cohesión por red es que
01:02:33
para otro día
01:02:36
es otro día la cohesión por red, así que
01:02:37
no lo adelanto
01:02:40
bueno, pues no sé si tenéis alguna
01:02:41
pregunta, a ver si lo voy a mirar aquí
01:02:47
en el otro cacharro
01:02:49
Ah, esto lo he dicho yo. Pues... no sé, decidme si se os ocurre algo que falta o queréis saber más.
01:02:51
Por mi parte, en principio, nada.
01:03:07
De acuerdo. La aplicación que tenéis que hacer tampoco es demasiado complicada para la práctica. Vamos a ver...
01:03:09
La que hay que hacer es que tenga una pinta parecida a esta. Todo este sitio lo han dejado para el teclado.
01:03:27
¿De acuerdo? Y entonces, pues bueno, hay que acordarse aquí, en principio hay que acordarse de dos cosas.
01:03:35
¿De qué puntuación se lleva y de qué número se estaba adivinando?
01:03:41
Hay que acordarse de esas dos cosas. Pues si te apagas la aplicación, cuando arranques, pues que siga con la puntuación original
01:03:50
y con el número que se sabía de antes que había que acertar. Esa hay que guardarlas.
01:03:55
eso cuando lo hagamos cuando lo hagáis os propongo que no viene como ninguna parte pero bueno buscar
01:04:01
a ver en qué directorio de por aquí acaba estando creo que se queda en caché estoy seguro que se
01:04:11
queda en caché pero ahora mismo no podría prometerlo porque al final esos son ficheros
01:04:18
que se guardan en algún sitio el formato no es especialmente elegible pero creo que se guarda
01:04:22
por aquí en la caché me imagino que os suena cuando vais a mirar es una aplicación a ver
01:04:28
es una aplicación de cómo se hace esto cómo se hacía para ver lo que había una forma de
01:04:33
preguntarle a este ir a ir a la información de la aplicación ahora vamos a ver editar
01:04:44
ahora he visto esto de uso de datos no dónde está esta aplicación no los tiene pero hay otras
01:04:54
aplicaciones que si tienen información yo antes tenía un botón que
01:05:08
era borrar datos borrar caché voy a mirarlo en otro sitio en
01:05:17
aplicaciones sin más saber aplicaciones esto si lo tenía que poner en alguna
01:05:22
parte yo lo pondría en aplicaciones
01:05:30
e información de aplicaciones pero bueno de todavía tener un botón de borrar
01:05:37
caché, ¿dónde está el botón de borrar caché?
01:05:44
¿Memoria?
01:05:48
Ah, aquí está, perdón, es que lo había dado ahí.
01:05:50
Pues ya veis que tiene un borrar datos
01:05:52
y un borrar caché. El borrar datos
01:05:54
es cargarse estos
01:05:56
files.
01:05:58
Y me imagino que también estos dirs.
01:06:00
Pero estos files. Y el borrar
01:06:02
caché creo que es
01:06:04
borrar la caché y creo
01:06:05
que ahí es donde se guardan las ades preferencias.
01:06:08
Estoy casi seguro.
01:06:12
Pero ahora mismo no lo sé.
01:06:14
Bueno, pues a mí no me queda más cosas
01:06:24
hay que contar estamos como siempre aquí está en el recreo llevamos el rato de recreo si no
01:06:25
tenéis otras preguntas pues yo cortaría aquí y vería si puedo subir esto que me creo que
01:06:30
estoy grabando voy a ver si estoy grabando porque no sé si no estoy solo de estarlo grabando
01:06:35
vale pues algo que sea de hoy aquí el último vídeo vale pues sólo llevo un gigante vídeo
01:06:44
Pero bueno, lo voy a intentar. A ver si consigo yo reducir esto a un tamaño razonable y poder subirlo a algún sitio.
01:06:59
Imagino que será demasiado grande, lo estaré grabando en Full HD o voy a saber.
01:07:14
Bueno, pues os voy a dejar ya, si no tenéis más preguntas.
01:07:21
Vale.
01:07:26
De acuerdo, pues nada, a ver si las otras... Ah, mira, éramos cuatro y ahora somos tres. Ah, sí, lo está. Bueno, pues como no me oye, pues como no hay preguntas, vamos. Creo que no me podía oír.
01:07:26
por cierto un aviso de acerca del examen voluntario y acerca de las normas y si
01:07:43
traes un ordenador que se puede el ordenador y yo en el fondo lo recomiendo para vosotros
01:07:59
y también para para mí para vosotros porque yo tengo puestos pero con el vuestro estáis
01:08:05
más familiarizados
01:08:14
sabéis lo que tenéis que hacer
01:08:15
lo contaré
01:08:16
por el aviso del profesor
01:08:18
para que lo sepáis
01:08:19
ok
01:08:20
pues nada
01:08:21
que paséis buena tarde
01:08:23
hasta
01:08:24
el próximo 15 días
01:08:25
hasta luego
01:08:26
hasta luego
01:08:27
- Autor/es:
- Álvaro González
- Subido por:
- Álvaro G.
- Licencia:
- Reconocimiento - No comercial - Compartir igual
- Visualizaciones:
- 5
- Fecha:
- 19 de enero de 2023 - 13:42
- Visibilidad:
- Clave
- Centro:
- IES ALONSO DE AVELLANEDA
- Duración:
- 1h′ 08′ 41″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1366x768 píxeles
- Tamaño:
- 211.13 MBytes