t10 questionari

21
TEMA 10 1/21 CrearQuestionari i ContestarQuestionari L'aplicació “El Gran Concurs del Presidents” en el tema 8 es pot personalitzar per construir qualsevol prova, però la personalització es limita als programadors de App Inventor. Només tu, com a programador, pot modificar les preguntes i respostes, i no hi ha manera que els pares, mestres, o altres usuaris d'aplicacions per crear els seus propis qüestionaris o canviar les preguntes de l'examen (a menys que ells també vulguen aprendre a utilitzar App Inventor! ). En aquest tema, construiràs una aplicació que permet a un “mestre” crear qüestionaris utilitzant un formulari d'entrada. Les preguntes de l'examen i respostes s'emmagatzemen en una base de dades de manera que "els estudiants" poden accedir a una aplicació separada per a fer l'examen. En la construcció d'aquestes dues aplicacions, podràs fer un altre salt conceptual significatiu i aprendre a crear aplicacions amb les dades generades per l'usuari que es comparteix entre les aplicacions i els usuaris. CrearQuestionari i ContestarQuestionari són dues aplicacions que funcionen en tàndem i permet que un "mestre" cree qüestionaris per a un "estudiant." Els pares poden crear aplicacions divertides i curioses per als seus fills durant un llarg viatge per carretera,els professors de primària poden construir proves de matemàtiques, i en la universitat els estudiants poden construir proves per ajudar els seus grups d'estudi per preparar un examen final. Aquest tema es basa en “El Gran Concurs del Presidents” del tema 8, de manera que si no ha completat aquesta aplicació, has de fer-ho abans de seguir aquí. Vas a dissenyar dues aplicacions, CrearQuestionari per al "mestre" (veure Figura 10-1) i ContestarQuestionari per al estudiant. Amb CrearQuestionari: L'usuari introdueix preguntes i respostes en un formulari d'entrada. Les parelles entrades pregunta-resposta es mostren. Les preguntes i respostes de l'examen s'emmagatzemen en una base de dades. ContestarQuestionari funcionarà de manera similar a l'aplicació “El Gran Concurs del Presidents” que ja has construït. De fet, crearàs aquesta aplicació utilitzant “El Gran Concurs del Presidents” com a punt de partida. ContestarQuestionari es diferència en que les preguntes seran les que es van introduir a la base de dades utilitzant CrearQuestionari. Figura 10-1. L'aplicació CrearQuestionari

Upload: tecnovicent

Post on 22-Jul-2015

130 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: T10 questionari

TEMA 10 1/21

CrearQuestionari i ContestarQuestionariL'aplicació “El Gran Concurs del Presidents” en el tema 8 es pot personalitzar per construir qualsevol prova, però la personalització es limita als programadors de App Inventor. Només tu, com a programador, pot modificar les preguntes i respostes, i no hi ha manera que els pares, mestres, o altres usuaris d'aplicacions per crear els seus propis qüestionaris o canviar les preguntes de l'examen (a menys que ells també vulguen aprendre a utilitzar App Inventor! ).

En aquest tema, construiràs una aplicació que permet a un “mestre” crear qüestionaris utilitzant un formulari d'entrada. Les preguntes de l'examen i respostes s'emmagatzemen en una base de dades de manera que "els estudiants" poden accedir a una aplicació separada per a fer l'examen. En la construcció d'aquestes dues aplicacions, podràs fer un altre salt conceptual significatiu i aprendre a crear aplicacions amb les dades generades per l'usuari que es comparteix entre les

aplicacions i els usuaris.

CrearQuestionari i ContestarQuestionari són dues aplicacions que funcionen en tàndem i permet que un "mestre" cree qüestionaris per a un "estudiant." Els pares poden crear aplicacions divertides i curioses per als seus fills durant un llarg viatge per carretera,els professors de primària poden construir proves de matemàtiques, i en la universitat els estudiants poden construir proves per ajudar els seus grups d'estudi per preparar un examen final. Aquest tema es basa en “El Gran Concurs del Presidents” del tema 8, de manera que si no ha completat aquesta aplicació, has de fer-ho abans de seguir aquí. Vas a dissenyar dues aplicacions, CrearQuestionari per al "mestre" (veure Figura 10-1) i ContestarQuestionari per al estudiant. Amb CrearQuestionari:

• L'usuari introdueix preguntes i respostes en un formulari d'entrada.

• Les parelles entrades pregunta-resposta es mostren.

• Les preguntes i respostes de l'examen s'emmagatzemen en una base de dades.

ContestarQuestionari funcionarà de manera similar a l'aplicació “El Gran Concurs del Presidents” que ja has construït. De fet, crearàs aquesta aplicació utilitzant “El Gran Concurs del Presidents” com a punt de partida. ContestarQuestionari es diferència en que les preguntes seran les que es van introduir a la base de dades utilitzant CrearQuestionari.

Figura 10-1. L'aplicació CrearQuestionari

Page 2: T10 questionari

TEMA 10 2/21

El que aprendràs

El Gran Concurs de Presidents va ser un exemple d'una aplicació amb dades estàtiques: no importa quantes vegades fas la prova, les preguntes són sempre les mateixes, ja que s'escriuen com a part de l'aplicació. Aplicacions de notícies, blocs, i aplicacions de xarxes socials com Facebook i Twitter treballen amb dades dinàmiques, el que significa que poden canviar amb el temps. Sovint, aquesta informació és genera dinàmicament pels usuaris, l'aplicació permet als usuaris introduir, modificar i compartir informació. Amb CrearQuestionari i ContestarQuestionari, aprendràs com construir una aplicació que s'encarrega de les dades generades per l'usuari.

Si has completat l'aplicació del xilòfon (tema 9), ja has estat introduït en les llistes dinàmiques; en aquesta aplicació, les notes musicals que l'usuari toca es registren en les llistes. Aplicacions amb les dades generades per l'usuari són més complexes, i els blocs són més abstractes, ja que no es basen en les dades predefinides i estàtiques. Es defineix la variable llista, però sense definir elements específics. En programar la seva aplicació, cal preveure les llistes que s'omplen amb les dades introduïdes per l'usuari final.

Aquest tutorial cobreix els conceptes d'App Inventor següents:

• Els formularis d'entrada per permetre que l'usuari introdueixi informació.

• Mostrar elements de diverses llistes.

• Dades persistents: CrearQuestionari salvarà les preguntes i respostes de l'examen en una base de dades web, i ContestarQuestionari les carregarà des de la mateixa base de dades.

• Intercanvi de dades: podràs emmagatzemar les dades en una base de dades web utilitzant el component TinyWebDB (en lloc del component TinyDB utilitzat en temes anteriors).

Introducció

Connectar-se a la pàgina web d'App Inventor i començar un nou projecte. El nom de "CrearQuestionari" i establir el títol de la pantalla de "CrearQuestionari". Obri l'Editor de blocs i connectat al teu telèfon.

Page 3: T10 questionari

TEMA 10 3/21

Disseny dels components

Utilitzeu el Dissenyador de components per crear la interfície de CrearQuestionari. En acabar, s'hauria d'assemblar a la Figura 10-2 (també hi ha instruccions més detallades després de la instantània).

Pots construir la interfície d'usuari que es mostra a la Figura 10-2 arrossegant els components indicats a la Taula 10-1. Arrossega cada component a la paleta en el visor i el nom com s'especifica a la taula. Tingueu en compte que pots deixar els noms de les etiquetes de capçalera (Label1 - Label4) com els seus valors per defecte (no els utilitzaràs en l'Editor de blocs de tota manera).

Figura 10-2. CrearQuestionari al Dissenyador de components

Taula 10-1. Tots els components de l'aplicació CrearQuestionari

Component Paleta Nom assignat Objectiu

TableArrangement Screen  Arrangement

TableArrangement1 Donar format a la pregunta i la resposta.

Label Basic Label1 La "Pregunta:".

TextBox Basic TBPregunta L'usuari introdueix preguntes aquí.

Label Basic Label2 La "Resposta:".

TextBox Basic TBResposta L'usuari introdueix respostes aquí.

Button Basic BEnviar L'usuari fa clic en aquest per presentar un parell de Preguntes i Respostes.

Label Basic Label3 Mostra prova "Preguntes i Respostes".

Label Basic EtPreguntesRespostes Mostra els parells Preguntes-Respostes introduïts anteriorment.

TinyWebDB No està preparat per a la primera vegada.

TinyWebDB1 Emmagatzemar dades, per a recuperar-les més tard.

Page 4: T10 questionari

TEMA 10 4/21

Establir les propietats dels components de la següent manera:

1. Establir el text de Label1 a "Pregunta", el text de Label2 a "Resposta", i el text de Label3 per "Preguntes i Respostes".

2. Estableixi la Grandària de Lletra de Label3 a 18 i marqui la casella FontBold.

3. Ajusteu el TBPregunta a "Introdueix una pregunta" i el de TBResposta a "Introdueix una resposta".

4. Establir el text de BEnviar a "Enviar".

5. Establir el text de EtPreguntesRespostes a "Preguntes i Respostes".

6. Moveu el TBPregunta, TBResposta, i les seves etiquetes associades a TableArrangement1.

Afegir comportaments als Components

Igual que amb l'aplicació “El Gran Concurs del Presidents”, primer definir algunes variables globals per a la LlistaPreguntes i LlistaRespostes, però aquest cop no ens proporcionarà preguntes i respostes fixes. La Taula 10-2 enumera els elements que necessitarà per definir les llistes.

Taula 10-2. Blocs per a la definició de la pregunta i la resposta llistesTipus de Bloc calaix Propòssit

def variable ("LlistaPreguntes") Definitions Definiu la variable LlistaPreguntes.

def variable ("LlistaRespostes") Definitions Definiu la variable LlistaRespostes.

make a list Lists Configureu la LlistaPreguntes de nous temes.

make a list Lists Configureu la LlistaRespostes de nous temes.

Els blocs han de ser com es mostra a la Figura 10-3.

Figura 10-3. Les llistes per CrearQuestionari

Tingueu en compte que, a diferència de l'aplicació “El Gran Concurs del Presidents”, les llistes es defineixen sense elements en les ranures. Això és perquè amb CrearQuestionari i ContestarQuestionari, totes les dades seran creats per l'usuari de l'aplicació (és dinàmica, les dades generades per l'usuari).

Page 5: T10 questionari

TEMA 10 5/21

Enregistrament de les entrades de l'usuari

El primer comportament que construïm és per controlar l'entrada de l'usuari. En concret, quan l'usuari introdueix una pregunta i resposta i fa clic en enviar, fareu servir afegir l'element a la llista de blocs per actualitzar el LlistaPreguntes i LlistaRespostes. La Taula 10-3 enumera els elements que necessitarà.

Taula 10-3. Blocs per registrar les entrades de l'usuariTipus de Bloc Calaix Objectiu

BEnviar.Click BEnviar S'activa quan l'usuari fa clic en aquest botó.

add items to list (2) Lists Afegiu les dades que l'usuari introdueix per les llistes.

global LlistaPreguntes My Definitions Connecteu està en la ranura de "llista" del primer bloc add items to list.

TBPregunta.Text TBPregunta Entrada d'usuari, enganxa està en la ranura "element" dels primer bloc add items to list.

global LlistaRespostes My Definitions Connecteu està en la ranura “llista” del segon bloc add items to list.

TBResposta.Text TBResposta Entrada d'usuari, enganxa està en la ranura "element" dels segon bloc add items to list.

set EtPreguntesRespostes.Text to EtPreguntesRespostes Mostra les llistes actualitzades.

make text Text Construeix un objecte de text amb dues llistes.

global LlistaPreguntes My Definitions Les preguntes.

text (:) Text Col·loqueu dos punts entre les llistes.global LlistaRespostes My Definitions Les respostes.

Page 6: T10 questionari

TEMA 10 6/21

Com funcionen els blocs

El bloc add items to list annexa, o afegeix, cada element al final d'una llista. Com es mostra a la Figura 10-4, l'aplicació pren el text que l'usuari ha introduït en les caixes de text TBPregunta i TBResposta i annexa a cada una la llista corresponent.

Els blocs add items to list actualitza les variables LlistaPreguntes i LlistaRespostes, però aquests canvis encara no es mostra a l'usuari. La tercera fila de blocs mostra aquestes llistes mitjançant la concatenació d'elles (fer el text) amb dos punts al mig. Per defecte, App Inventor mostra llistes amb parèntesis que envolten i els espais entre els elements d'aquesta manera: (item1 item2 elemento3). Per descomptat, aquesta no és la forma ideal per mostrar les llistes, sinó que li permetrà posar a prova el comportament de l'aplicació per ara. Més tard, crearem un mètode més sofisticat de mostrar les llistes que apareixen cada parell de preguntes i respostes en una línia separada.

Figura 10-4. Afegint les noves entrades a la llista

Posa a prova la teva app. Al telèfon, escriviu una pregunta i la resposta i feu clic al BEnviar. L'aplicació ha de mostrar la sola entrada a la LlistaPreguntes, dos punts, i després l'única entrada de la LlistaRespostes. Afegir una segona pregunta i la resposta a assegurar-se que les llistes es creen correctament.

Page 7: T10 questionari

TEMA 10 7/21

Netejant les preguntes i respostes

Com es recordarà des de l'aplicació “El Gran Concurs del Presidents”, quan va passar a la següent pregunta a la llista, és necessari per ocultar els resultats de les respostes de la pregunta anterior. En aquesta aplicació, quan un usuari envia un parell de preguntes i respostes, voldràs esborrar les caixes de text TBPregunta i TBResposta perquè estiguin llestos per a una nova entrada en lloc de mostrar l'anterior. Per això, afegiu els blocs que figuren en la taula 10-4 a la part inferior del controlador d'esdeveniments BEnviar.Click.

Taula 10-4. Blocs per quedar-se en blanc la pregunta i caselles de resposta de textTipus de Bloc Calaix Objectiu

set TBPregunta.Text to TBPregunta En blanc la pregunta.

set TBResposta.Text to TBResposta En blanc la resposta.

text (two blank ones) Text Reemplaci TBPregunta i TBResposta.

Com funcionen els blocs

Quan l'usuari envia una nova pregunta i resposta, que s'afegeixen a les seves respectives llistes i es mostra. En aquest punt, el text al TBPregunta i TBResposta es queda en blanc amb blocs de text buits, com es mostra a la Figura 10-5. Tingueu en compte que pot crear un bloc de text buit fent clic al text dins del bloc i prémer Elimina.

Figura 10-5. Netejant les caixes de text de pregunta i resposta després de la presentació

Page 8: T10 questionari

TEMA 10 8/21

Posa a prova la teva app. Afegiu algunes preguntes i respostes. Cada vegada que envieu un parell, el TBPregunta i TBResposta ha de ser netejat; només la pista apareix (per exemple, "Introdueix una pregunta ").

Veient parells pregunta-resposta en diverses línies

En l'aplicació que s'ha construït fins ara, les llistes de preguntes i respostes es mostren per separat i amb el format predeterminat de visualització de la llista de App Inventor. Així que, si estàs fent un examen sobre capitals dels estats i havia dos parells de preguntes i respostes, podria semblar així:

(Quina és la capital de Califòrnia? Quina és la capital de Nova York? Sacramento Albany)

Com es pot imaginar, si algú crea una prova bastant llarg, pot ser bastant complicat. Una millor visualització es mostrar cada pregunta amb la seva resposta corresponent, amb un parell de preguntes i respostes per línia com aquesta:

Quina és la capital de Califòrnia: Sacramento

Quina és la capital de Nova York: Albany

La tasca aquí és una mica més complicada, ja que està tractant amb dues llistes. La causa de la seva complexitat, posaràs els blocs en un procediment anomenat MostraPRs, i cridaràs a aquest procediment des del controlador d'esdeveniments BEnviar.Click.

Per mostrar els parells pregunta-resposta en línies separades, hauràs de fer el següent:

• Utilitzeu un bloc foreach per iterar a través de cada pregunta a LlistaPreguntes.

• Utilitzeu una variable RespostaIndex de manera que pots prendre cada resposta a mesura que itera a través de les preguntes.

• Utilitzeu make text per a construir un objecte de text amb cada parella pregunta i resposta, i un caràcter de nova línia (\n) que separa cada parella.

Necessitaràs els elements llistats a la Taula 10-5.

Page 9: T10 questionari

TEMA 10 9/21

Taula 10-5. Blocs per mostrar les parelles pregunta-resposta en línies separadesTipus de Bloc Calaix Propòssit

to procedure ("MostraPRs") Definition Aquest procediment és un bloc que tanca tots els altres blocs.

def var ("Resposta") Definition Emmagatzemar temporalment cada resposta.

def var ("RespostaIndex") Definition Mantingui un registre de la resposta (i la pregunta) que l'usuari està connectat.

text ("text") Text Inicialitzeu la variable Resposta a text.

number (1) Math Inicialitzeu la variable RespostaIndex to 1.

set EtPreguntesRespostes.Text to My Definitions Inicialitzar l'etiqueta a buid.

text ("") Text Connectar-ho a set EtPreguntesRespostes.Text to.

set global RespostaIndex to My Definitions Restableix RespostaIndex cada vegada que MostraPRs es cridada.

number (1) Math Restableix RespostaIndex a 1.

foreach Control Recorrer la LlistaPreguntes.

name question (Apareix com un argument de foreach, el nom per defecte és var.)

Canvieu el nom de la variable foreach de marcador de posició a question.

global LlistaPreguntes My Definitions Connecteu esta en la ranura “llist” de foreach.

set answer to My Definitions Establiu aquesta variable cada vegada al foreach.

select list item Lists Seleccioneu a la llista LlistaRespostes.

global LlistaRespostes My Definitions Connecteu està en la "llista" de la ranura select list item.

global RespostaIndex My Definitions Connecteu aquesta al "índex" de la ranura select list item.

set global RespostaIndex to My Definitions Incrementar l'índex en cada iteració del bucle.

+ Math Incrementar RespostaIndex.

global RespostaIndex My Definitions Connecteu aquesta en +.

number (1) Math Connecteu aquesta en +.

set EtPreguntesRespostes.Text to EtPreguntesRespostes Mostrar les QA.

make text Text Construir cada parell QA.

EtPreguntesRespostes.Text EtPreguntesRespostes En iterar, afegiu cada nou parell dels anteriors.

text ("\n") Text Col·loqueu una nova línia entre parells.

value question My Definitions Aquest és el marcador de posició del foreach, és la pregunta actual que estem processant.

text (":") Text Col·loqueu dos punts entre la pregunta i la resposta.

global answer My Definitions La resposta actual.

Page 10: T10 questionari

TEMA 10 10/21

Com funcionen els blocs

El bloc MostraPRs encapsula tots els blocs per mostrar les dades, com es mostra a la Figura 10-6. Mitjançant l'ús d'un procediment, no tindrem els blocs de la pantalla més d'una vegada en l'aplicació, i només podem cridar MostraPRs quan hem de mostrar les llistes.

Figura 10-6. El procediment MostraPRs

El foreach només li permet recórrer una llista. En aquest cas, hi ha dues llistes, i cal seleccionar cada resposta a mesura que avança a través de les preguntes. Per aconseguir això, utilitzarem una variable d'índex, com ho vam fer amb l'Índex de PreguntaActual en el tema 8. En aquest cas, la variable d'índex, RespostaIndex, s'utilitza per rastrejar la posició en la LlistaRespostes com el foreach passa a través de la LlistaPreguntes.

RespostaIndex es posa a 1 abans que el foreach comence. Dins el foreach, RespostaIndex selecciona la resposta actual de la LlistaRespostes, i després s'incrementa. A cada iteració del foreach, la pregunta actual i resposta es concatena amb el final de la propietat EtPreguntesRespostes.Text, amb dos punts entre ells.

Page 11: T10 questionari

TEMA 10 11/21

En trucar al nou procediment

Ara disposa d'un procediment per a la visualització de les parelles pregunta-resposta, però no ajudarà a menys que ho digui quan ho necessiti. Modifiqueu el controlador d'esdeveniments BEnviar.Click cridant MostraPRs en lloc de mostrar les llistes amb el senzill EtPreguntesRespostes.Text bloc set EtPreguntesRespostes.Text to. Els blocs d'actualització haurian d'aparèixer com es mostra a la Figura 10-7.

Figura 10-7. En cridar al procediment MostraPRs de BEnviar.Click

Posa a prova la teva app. Al telèfon, afegir unes quantes més parelles de pregunta-resposta. La pantalla ha de mostrar cada pregunta amb la seua resposta corresponent, amb cada parella de preguntes i respostes en una línia separada.

Page 12: T10 questionari

TEMA 10 12/21

Emmagatzematge de les preguntes i respostes en una base de dades

Fins ara, has creat una aplicació que posa les preguntes i respostes en una llista. Però, què passa si l'aplicació CrearQuestionari es tanca? Si has completat el tema 4 o el tema 7, saps que si no emmagatzema les dades en una base de dades, no seran allà quan l'usuari tanca i torna a obrir l'aplicació. L'emmagatzematge de les dades de manera constant permetrà que l'aplicació CrearQuestionari puga veure o editar la darrera actualització de la prova cada vegada que s'obre. L'emmagatzematge persistent també és necessària perquè l'aplicació ContestarQuestionari necessita tenir accés a les dades.

Ja estàs familiaritzat amb l'ús del component TinyDB per emmagatzemar i recuperar dades d'una base de dades. Però en aquest cas, utilitzarem el component TinyWebDB. Mentre que TinyDB emmagatzema la informació directament en un telèfon, TinyWebDB emmagatzema dades en bases de dades que resideixen a la web.

La seua aplicació necessita utilitzar una base de dades en línia en lloc d'una emmagatzemada al telèfon d'una persona. La qüestió clau aquí és que estàs construint dues aplicacions que necessiten tenir accés a les mateixes dades, si el CrearQuestionari emmagatzema les preguntes i respostes en el seu telèfon, els ContestarQuestionari no tindrà manera d'arribar a les dades. Com que el TinyWebDB emmagatzema dades a la Web, el ContestarQuestionari pot accedir a les preguntes i respostes de l'examen en un dispositiu diferent a la de l'examen del CrearQuestionari.

Aquest és l'esquema general per a fer la llista de dades com les preguntes i respostes persistents:

• Guardi una llista a la base de dades cada vegada que un nou element s'afegeix a la mateixa.

• Quan l'aplicació s'inicia, carrega la llista de la base de dades en una variable. Iniciar mitjançant l'emmagatzematge de la LlistaPreguntes i LlistaRespostes a la base de dades cada vegada que l'usuari entra en una nova parella. Anem a afegir els elements que es mostren a la Taula 10-6 per al controlador d'esdeveniments BEnviar.Click.

Taula 10-6. Els blocs per a l'emmagatzematge de les dades a la base de dadesTipus de Bloc Calaix Objectiu

TinyWebDB1.StoreValue TinyWebDB1 Deseu les preguntes de la base de dades.

text ("Preguntes") Text Connecteu "qüestions" com l'etiqueta de StoreValue.

global Question List My Definitions Connecteu està en el "valor" de la ranura StoreValue.

TinyWebDB1.StoreValue TinyWebDB1 Deseu les respostes a la base de dades.

text ("Respostes") Text Connecteu "respostes" com l'etiqueta de StoreValue.

global LlistaRespostes My Definitions Connecteu està en el "valor" de la ranura StoreValue.

Page 13: T10 questionari

TEMA 10 13/21

Com funcionen els blocs

Els blocs TinyWebDB1.StoreValue emmagatzemen les dades en una base de dades web. StoreValue té dos arguments: l'etiqueta que identifica les dades i el valor que són les dades reals que vol emmagatzemar. Com es mostra a la Figura 10-8, la LlistaPreguntes s'emmagatzema amb una etiqueta de "Preguntes", mentre que el LlistaRespostes s'emmagatzema amb una etiqueta de "Respostes".

No obstant això, per a la teua aplicació, has d'utilitzar etiquetes distintes de "Preguntes" i "Respostes" (per exemple, "JosepPreguntes " i "JosepRespostes"). Això és important perquè estàs utilitzant la base de dades web predeterminada per App Inventor, perquè les teues dades (la llista de preguntes i respostes) poden ser sobrescrits per altres, incloent a altres persones seguint aquest tutorial.

Tingueu en compte que el servei web per defecte és compartit entre els programadors i aplicacions, de manera que és només per a proves. Quan estiguis llest per implementar l'aplicació amb usuaris reals, hauràs de configurar el teu propi servei de base de dades privada. Afortunadament, fer-ho és senzill i no requereix de programació.

Figura 10-8. Emmagatzematge de les preguntes i respostes a la base de dades

Page 14: T10 questionari

TEMA 10 14/21

Posa a prova la teva app. Introduïu una pregunta i resposta i feu clic a Envia. Per comprovar si les dades s'emmagatzemen a la base de dades com es vulgui, obriu un navegador i escriviu la http://appinvtinywebdb.appspot.com URL a la barra d'adreces. La

pàgina que apareix és la interfície administrativa per a la base de dades i inclou una taula de parells de valors d'etiqueta. Si busques l'etiqueta que va utilitzar en els blocs StoreValue (per exemple, "preguntes"), es pot comprovar el valor emmagatzemat amb ell. També pot fer clic a l'opció-enllaç "/getvalue" i introduïu l'etiqueta per trobar el seu valor. ¿Les seves dades apareixen?

Per carregar dades de la base de dades

Una de les raons que tenim per emmagatzemar les preguntes i respostes en una base de dades és per que la persona al crear el qüestionari pot tancar l'aplicació i obrir-lo en un moment posterior, sense perdre les preguntes i respostes prèviament introduïdes. (Nosaltres també ho fem perquè el ContestarQuestionari pot tenir accés a les preguntes, però ens ocuparem d'això més endavant.) Anem al programa per carregar els blocs de les llistes de nou en l'aplicació de la base de dades web cada vegada que es reinicia l'aplicació.Com ja hem cobert en els temes anteriors, per especificar què ha de passar quan una aplicació s'inicia, es programa el controlador d'esdeveniments Screen.Initialize. En aquest cas, l'aplicació ha de sol·licitar dues llistes de la base de dades web TinyWebDB (les preguntes i les respostes), de manera que el Screen1.Initialize farà dues cridades a TinyWebDB.GetValue.

Necessitaràs els elements llistats a la Taula 10-7.

Taula 10-7. Blocs de Screen.Initialize per recuperar dades de bases de dadesTipus de Bloc Calaix Objectiu

Screen1.Initialize Screen1 S'activa quan l'aplicació s'inicia.

TinyWebDB.Get Value (2) TinyWebDB Sol·licitar les llistes emmagatzemades LlistaPreguntes i LlistaRespostes.

text ("Preguntes") Text En lloc de "Preguntes", utilitzeu l'etiqueta que s'utilitza per emmagatzemar les preguntes.

text ("Respostes") Text En lloc de "Respostes", utilitzeu l'etiqueta que s'utilitza per emmagatzemar les preguntes.

Page 15: T10 questionari

TEMA 10 15/21

Com funcionen els blocs

Els blocs TinyWebDB.GetValue, que es mostra a la Figura 10-9, funcionen de manera diferent que TinyDB.GetValue, que retorna un valor immediatament. TinyWebDB.GetValue només demana les dades de la base de dades web, però no rep immediatament un valor. En canvi, quan arribin les dades de la base de dades web, un esdeveniment TinyWebDB.GotValue es dispara. També ha de programar un controlador d'esdeveniments per processar les dades que es retornen.

Figura 10-9. Sol·licitud de les llistes de la base de dades quan l'aplicació s'obre

Quan l'esdeveniment TinyWebDB.GotValue ocorre, les dades sol·licitades estan contingudes en un argument amb nom valueFromWebDB. La marca sol·licitada es troba al argument tagFromWebDB.

En aquesta aplicació, ja que es fan dos sol·licituds diferents per les preguntes i respostes, GotValue es dispararà dues vegades. Per evitar posar preguntes si LlistaRespostes o viceversa, la teua aplicació ha de comprovar l'etiqueta per veure quina sol·licitud ha arribat, i després posar el valor rebut de la base de dades a la llista corresponent (LlistaPreguntes o LlistaRespostes). Ara t'estàs donant compte de l'útil que realment són aquestes etiquetes!

Necessitaràs els elements llistats a la Taula 10-8 per al controlador d'esdeveniments GotValue.

Taula 10-8. Blocs per TinyWebDB.GotValueTipus de Bloc Calaix Propòssit

TinyWebDB.GotValue TinyWebDB S'activa quan les dades arriben.

if Control Comprovar si la base de dades té dades.

is a list? List Si les dades és una llista, és que no està buida.

value valueFrom WebDB My Definitions L'argument que sosté les dades retornats per la base de dades.

ifelse Control Pregunti quines sol·licitud GetValue han arribat.

= Math Comparar tagFromWebDB a "preguntes".

text ("Preguntes") Text Aquesta és l'etiqueta que s'utilitza per emmagatzemar LlistaPreguntes.

value tagFromWebDB My Definitions Un argument de GotValue, especifica que sol·liciti.

set global LlistaPreguntes to My Definitions Si tagFromWebDB és "Preguntes", aquesta llista s'ha d'establir.

set global LlistaRespostes to My Definitions Si tagFromWebDB no és "Preguntes", aquesta llista s'ha d'establir.

value valueFromWebDB (2) My Definitions Mantingui el valor rebut de la base de dades.

if Control Comproveu que les dues llistes es carreguen abans de mostrar.

= Math Comparar les longituds de les llistes.

length of list (2) Lists Comprovar si les longituds de les llistes són les mateixes.

global LlistaPreguntes My Definitions Connectar-lo a una de la longitud de blocs de llista.

global LlistaRespostes My Definitions Connecteu aquesta en l'altra longitud de bloc de llista.

call MostraPRs My Definitions Mostrar les preguntes i respostes recentment carregades.

Page 16: T10 questionari

TEMA 10 16/21

Com funcionen els blocs

L'aplicació crida a TinyWebDB1.GetValue dues vegades: una vegada per sol·licitar la LlistaPreguntes emmagatzemada i una altra vegada per sol·licitar la LlistaRespostes emmagatzemada. Quan arriben les dades de la base de dades web de qualsevol sol·licitud, l'esdeveniment TinyWebDB1.GotValue s'activa, com es mostra en la figura 10-10.

Figura 10-10. GotValue s'activa quan les dades arriben des de la web

L'argument valueFromWebDB de GotValue conté les dades retornades per la sol·licitud de la base de dades. Necessitem l'exterior bloc "if" al controlador d'esdeveniments perquè la base de dades retorna un text buit ("") en valueFromWebDB si és el primer cop que s'utilitza l'aplicació i no hi ha encara preguntes i respostes. En preguntar si el valueFromWebDB is a list? Esteu assegurant que hi ha algunes dades realment retornades. Si no hi ha cap dada, pots passar per alt els blocs per al processament de la mateixa.

Si es retornen dades (is a list? És cert), els blocs han d'anar a comprovar quina sol·licitud ha arribat. L'etiqueta d'identificació de les dades estan en tagFromWebDB: seran tant "Preguntes" o "Respostes". Si l'etiqueta és "Preguntes", el valueFromWebDB es posa a la variable "LlistaPreguntes". En cas contrari (else), es col·loca al LlistaRespostes.

Només volem mostrar les llistes després que tots dos han arribat (GotValue s'ha disparat dues vegades). Pensa com podria saber que es cert que té carregades ambdues llistes de la base de dades. Aquests blocs d'utilitzar un if de prova per comprovar si la longitud de les llistes són les mateixes, ja que això només pot ser veritat si tots dos s'han tornat. En aquest cas, el procediment MostraPRs que vas escriure anteriorment és cridat per a mostrar les dades carregades.

Posa a prova la teva app. Reinicieu l'aplicació fent clic a "Connect to Device ..." en l'Editor de blocs. Quan l'aplicació s'inicia, ha de mostrar les preguntes i respostes prèviament introduïdes. Si tanca l'aplicació i reinicia, la prova anterior encara ha d'aparèixer.

Page 17: T10 questionari

TEMA 10 17/21

L'aplicació completa: CrearQuestionari

La figura 10-11 il·lustra els blocs finals per a l'aplicació CrearQuestionari.

Figura 10-11. Els blocs per CrearQuestionari

Page 18: T10 questionari

TEMA 10 18/21

ContestarQuestionari: una aplicació per prendre l'examen de la Base de Dades

Ara tens una aplicació CrearQuestionari que emmagatzemarà una prova en una base de dades web. Construir ContestarQuestionari, l'aplicació que carrega dinàmicament la prova, és més senzill. Pot ser construït amb unes poques modificacions del que has fet en el tema 8.

Obriu el qüestionari de l'aplicació “El Gran Concurs del Presidents”, triant desa i, a nomenar el nou projecte "ContestarQuestionari". Això deixarà la seva aplicació “El Gran Concurs del Presidents” sense modificacions, però li permeten usar els seus blocs com a base per ContestarQuestionari.

A continuació, realitzi els canvis següents en el Dissenyador:

1. Aquesta versió de CrearQuestionari / ContestarQuestionari no mostra les imatges amb cada pregunta, així que primer eliminar les referències a les imatges des de l'aplicació ContestarQuestionari. En el Dissenyador de components, seleccioneu cada imatge des de la paleta de Media i elimineu-lo. A continuació, l'eliminació del component Image1, que eliminarà totes les referències a ell des del Editor de blocs.

2. Des ContestarQuestionari treballarà amb dades de bases de dades, arrossegueu un component TinyWebDB en l'aplicació.

3. Com que no vols que l'usuari respongui, feu clic al BSeguent fins que les preguntes estan carregats, desseleccioneu la propietat Enabled del BResposta i BSeguent.

Page 19: T10 questionari

TEMA 10 19/21

ContestarQuestionari: La modificació dels blocs de carregar el qüestionari de la Base de Dades

Ara modificar els blocs de manera que el qüestionari donat a l'usuari es carregue des de la base de dades. En primer lloc, ja que no hi ha preguntes i respostes fixes, treure tota la qüestió actual i respondre als blocs de text des del bloc make a list dins de la LlistaPreguntes i LlistaRespostes. Els blocs resultants han d'aparèixer tal com es mostra en la figura 10-12.

Figura 10-12. Les llistes de preguntes i respostes comencen en buit

També pot eliminar per complet la PictureList, aquesta aplicació no s'ocuparà de les imatges. Ara modifiqui la Screen1.Initialize perquè cridi TinyWebDB.GetValue dues vegades per carregar les llistes, tal com ho va fer en CrearQuestionari. Heu de mirar com ho fan els blocs a la figura 10-13.

Figura 10-13. Sol·licitud de les preguntes i respostes de la base de dades web

Finalment, arrossegueu un controlador d'esdeveniments TinyWebDB.GotValue. Aquest controlador d'esdeveniments ha de ser similar a la utilitzada en CrearQuestionari, però aquí volem mostrar només la primera pregunta i cap de les respostes. Intenta fer aquests canvis pel teu compte, i després fer una ullada als blocs de la figura 10-14 per veure si coincideixen amb la teva solució.

Figura 10-14. GotValue maneja les dades que arriben des de la web

Page 20: T10 questionari

TEMA 10 20/21

Com funcionen els blocs

Quan l'aplicació s'inicia, Screen1.Initialize es dispara i l'aplicació sol·licita les preguntes i respostes de la base de dades web. Quan cada petició arriba, el controlador d'esdeveniments TinyWebDB.GotValue es dispara. L'aplicació comprova primer si hi ha de fet les dades de valueFromWebDB utilitzant is a list?. Si troba dades, l'aplicació vos demanarà quina sol·licitud ha entrat, utilitzant tagFromWebDB, i col·loca el valueFromWebDB a la llista corresponent. Si la LlistaPreguntes s'està carregant, la primera pregunta es selecciona de LlistaPreguntes i es mostra. Si la LlistaRespostes s'està carregant, el BResposta i BSeguent estan habilitades perquè l'usuari pot començar a fer la prova.

Posa a prova la teva app. Reinicieu l'aplicació fent clic a "Connect to Device ..." en l'Editor de blocs. La primera pregunta del seu qüestionari CrearQuestionari apareix? Es pot fer un examen, tal com va fer amb el “El Gran Concurs de Presidents” (excepte les fotografies)?

L'aplicació completa: ContestarQuestionari

La Figura 10-15 il·lustra els blocs finals per ContestarQuestionari.

Figura 10-15. Els blocs per ContestarQuestionari

Page 21: T10 questionari

TEMA 10 21/21

Variacions

Quan hageu acabat CrearQuestionari i ContestarQuestionari, és possible que vulgueu explorar algunes variacions. Per exemple:

• Permeti que el CrearQuestionari especifique una imatge per a cada pregunta. Per descomptat, el desenvolupador de l'aplicació no es pot precarregar les imatges, i actualment no hi ha manera que l'usuari de l'aplicació puga fer-ho. Així que les imatges hauran de ser URL de la web, i el CrearQuestionari haurà d'introduir aquestes URL com un tercer element en el formulari CrearQuestionari. Recordeu que pot establir la propietat Picture d'un component d'imatge a una URL.

• Permeti que el CrearQuestionari puga eliminar elements de les preguntes i respostes. Pots deixar que l'usuari triï una pregunta utilitzant el component ListPicker, i es pot treure un element de la llista d'elements del bloc remove (recordeu de treure de les dues llistes i actualitzar la base de dades).

• Deixeu que el nom del CrearQuestionari puga ser canviat. Haurà de guardar el nom del qüestionari sota un codi diferent a la base de dades, i hauràs de carregar el nom juntament amb el qüestionari de ContestarQuestionari. Quan hagi carregat el nom, l'utilitzen per establir la propietat Screen.Title perquè aparegui quan l'usuari realitza una prova.

• Permet crear múltiples qüestionaris. Necessitaràs una llista de qüestionaris, i es pot utilitzar el nom de cada qüestionari com (part de) l'etiqueta per emmagatzemar les seves preguntes i respostes.

Resum

Aquests són alguns dels conceptes que hem tractat en aquest tema:

• Les dades dinàmiques és informació introduïda per part de l'usuari de l'aplicació, o carregades per les bases de dades. Un programa que treballa amb dades dinàmiques és més abstracte.

• Pots emmagatzemar dades de forma persistent en una base de dades web amb el component TinyWebDB.

• Pots recuperar dades d'una base de dades TinyWebDB sol·licitant-la amb TinyWebDB.GetValue. Quan la base de dades web retorna les dades, l'esdeveniment TinyWebDB.GotValue es dispara. Al controlador d'esdeveniments TinyWebDB.GotValue, pots posar les dades en una llista o processar-les d'alguna manera.

• Les dades TinyWebDB es poden compartir entre diversos telèfons i aplicacions.