Göm menyn

Laboration 3. Komponenter och synkronisering

Syfte

Ibland måste man hämta data utifrån. I bästa fall bara från en annan tråd, i värsta fall från en annan process eller asynkront över nätverk. Trots detta måste applikationen fungera och vara responsiv hela tiden. Man får alltså inte blockera ui-tråden hur som helst exempelvis för att vänta på data. Man får heller inte sköta utritning eller uppdatering av sina komponenter från någon annan tråd än ui-tråden om inte operationen är synkroniserad.

Uppgift

I den här laborationen ska du skapa en helt egen komponent InteractiveSearcher, en interaktiv sökruta som vid första anblicken ser ut som en textruta. När text skrivs in ska en lista visas under där de N bästa träffarna listas (N ska kunna ändras i programmet). Listan ska uppdateras efter ändring i textrutan (varje bokstav som läggs till eller tas bort). Om man klickar på något av förslagen så ska detta skrivas i textboxen. Sökningen i/till listan sker med hjälp en given webb-tjänst (http://getnames-getnames.a3c1.starter-us-west-1.openshiftapps.com/getnames). Webb-tjänsten tar två argument, ett id samt en söksträng Där id är unikt för varje sökning (används för att hålla ordning på olika sökningar i er kod) och söksträngen är de namn eller början på namn ni söker efter. Som exempel: http://getnames-getnames.a3c1.starter-us-west-1.openshiftapps.com/getnames/3/Emm
retunerar : {"id": "3", "result": ["EMMA", "EMMALINE", "EMMIE", "EMMY"]}
Observera att flera sökningar ska kunna utföras samtidigt, och de returnerar inte säkert i samma ordning som de beordrades. Du måste alltså synkronisera och se till att du använder svaret på den senaste sökningen.
  • Du skall utveckla en fristående komponent, InteractiveSearcher, som motsvarar sjä va sökrutan. Denna komponent får innehålla andra android-ui komponenter. Detta är den komponent som användaren lägger till i sin container/view.
  • Komponenten ska visa en lista av kompletteringsförslag, denna lista ska inte ligga i ui-hierarkin för din komponent utan bör ligga ovanpå de andra komponenterna. Listan bör ärva från View.
  • Popuprutans textrader måste ritas ut manuellt, du får inte använda TextView,List eller liknande.
  • Komponenten får se ut som du vill så länge den är användbar och tydlig.

Tips

Tänk på att du kan använda dig av flera komponenter och koppla ihop dem. Fältet som användren skriver i, där får du använda dig av EditText. Du kan använd dig av JSONObject för att göra om sökresultaten till något som du kan avnända i din komponent.

Redovisning

Demonstrera dina applikation för labassistenten, assistenten kan be dig förklara delar av koden. Assistenten berättar hur hen vill att du lämnar in din kod.

Länkar

Egna komponenter i android
JSONObject Att anropa webb tjänster från Android

Sidansvarig: Anders Fröberg
Senast uppdaterad: 2017-11-07