Saltar navegación

Tutoría 2023-01-18 (el webex no graba)

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 19 de enero de 2023 por Álvaro G.

5 visualizaciones

Descargar la transcripción

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
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
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

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid