Android fortsättning. TDDD80 Mobila och sociala applikationer

Relevanta dokument
Android översikt. TDDD80 Mobila och sociala applikationer

Android översikt. TDDD80 Mobila och sociala applikationer

Entreprenöriell programmering. Android översikt

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Android - Tips & Tricks

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Generiska konstruktioner. Kursbokens kapitel 13

Entreprenöriell programmering TDP028

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Agil användbarhetsutveckling för handhållna enheter. Per Lind

DB, DATA, LOGIC, EXPOSURE (WEB)

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Services + REST och OAuth

OOP Objekt-orienterad programmering

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Tentamen Programmering fortsättningskurs DIT950

Exemple på Tentauppgifter Webbprogrammering

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

TDDD78 Viktiga begrepp, del 2

DAT043 - Föreläsning 7

Classes och Interfaces, Objects och References, Initialization

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Properties. Användbara metoder som kan anropas i propertychanged:

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Högskolan i Gävle. Introduktion till att skapa appar för Android VT Eat App! Jacob Gavin

Riktiga Vykort Partner App Teknisk beskrivning

Objektorienterad Programkonstruktion. Föreläsning 11 6 dec 2016

1ME323 Webbteknik 3 Lektion 6 API. Rune Körnefors. Medieteknik Rune Körnefors

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y;

Swedbank Mobile Loadtesting. LoadRunner Mobile App protocol

Concurrency Saker händer samtidigt. Process En instans av ett program

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

Lösningar till tentamen i EDAF25

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID

OOP Objekt-orienterad programmering

TENTAMEN OOP

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Länkade strukturer. (del 2)

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert AWT. Paket för hantering av grafik

LÖSNINGSFÖRSLAG

F4. programmeringsteknik och Matlab

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 3. Stack

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Föreläsning 3: Händelsestyrda program och användargränssnitt

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Fördjupad Java. Undantagshantering. Fel

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

Malmö högskola 2007/2008 Teknik och samhälle

OOP Objekt-orienterad programmering

Tentamen Nätverksprogrammering Lösningsförslag

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Polymorfi. Objektorienterad och komponentbaserad programmering

OOP Objekt-orienterad programmering

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Tentamen. Lösningsförslag

EDA095 HTML. Per Andersson. April 26, Lund University Innehåll: HTML, CSS, DOM, JavaScript

Lösningar till tentamen i EDAF25

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Föreläsning 3. Stack

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Arv (Inheritance) Multipelt arv finns i verkligheten. Överskuggning, metodbindning. Läsanvisning: ! Arv! Object, instanceof! Relationer!

Lab 6: ASP.NET 2.0 Providermodellen

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Tentamen Nätverksprogrammering Lösningsförslag

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Lösningsförslag till tentamen

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Att skriva till och läsa från terminalfönstret

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Mutability och State. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Arv. Objektorienterad och komponentbaserad programmering

Konstruktion av klasser med klasser

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TUTORIAL: KLASSER & OBJEKT

Lösningsförslag till exempeltenta 2

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

TDP013. Webbprogrammering och interaktivitet. AJAX, CORS & jquery. Marcus Bendtsen Institutionen för Datavetenskap (IDA)

Hämta data mha URLer Föreläsning 2b. Innehåll Klassen URL

DAT043 Objektorienterad Programmering

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Föreläsning 9: Arv och UML

JAVA Mer om klasser och objektorientering

Transkript:

Android fortsättning TDDD80 Mobila och sociala applikationer

2018-02-24 Krav labb A2 + A3 Scrollbar lista + detalj-vy Stor skärm - liten skärm Rotation Nätverksanrop Hämta data från server Hantera JSON

Scrollbar lista + detalj-vy

2018-02-24 Uppgift Scrollbar lista + detalj-vy Stor skärm - liten skärm

2018-02-25 Uppgift Scrollbar lista + detalj-vy Stor skärm - liten skärm

2018-02-25 Bred skärm eller roterat (landscape)

2018-02-25 Använd två Activities?

2018-02-25 Nackdelar Activities är speciella, eftersom de har direktkontakt med Android Kan inte läggas två på samma skärm Kan inte läggas inne i varandra

2018-02-25 Vill ha flyttbara, återanvändbara skärmbitar

2018-02-25 Mål Återanvända både layout Layout klickhantering Beteende datahantering

2018-02-24

2018-02-24

2018-02-24 MainActivity Direktkontakt med Android OS Kan anropas utifrån (från andra appar) Navigering mellan fragment/skärmar Starta med ListFragment Hantera klick Starta upp nytt DetailsFragment

2018-02-24 Fragments Visning av information Datahantering Ska inte veta om vilka andra fragment som finns på skärmen just nu Eftersom detta kan variera Ska bara veta om MainActivity Mer generellt Context

2018-02-25 Klickhantering ListFragment visas på skärmen En list-item klickas i ListFragment Kan inte meddela DetailsFragment direkt Skicka klick uppåt till MainActivity

2018-02-25 Uppåt-kommunikation MyListFragment: @Override public void onlistitemclick(listview l, View v, int position, long id) { // call the callback method on the context // that this fragment is currently attached to mycontext.onitemselected(l, v, position, id); } Vad händer om mycontext (dvs. MainActivity) inte har en metod som heter onitemselected?

2018-02-26 Lösning Kräv att Context (MainActivity) som fragmentet kopplas till implementerar ett interface som definieras av fragmentet M.a.o. definiera ett interface i MyListFragment: MyListFragment.ItemSelectedListener

2018-02-25 MyListFragment.ItemSelectedListener I MyListFragment: // Want to be able to call this method on the context // that this list fragment is attached to public interface ItemSelectedListener { public void onitemselected(listview l, View v, int position, long id); }

2018-02-26 Fragmentet dubbelkollar // Fragmentet håller på att kopplas till MainActivity @Override public void onattach(context context) { super.onattach(context); if (context instanceof ItemSelectedListener) { mycontext = (ItemSelectedListener) context; } Har context implementerat gränsnittet? } else { throw new ClassCastException(context.toString() + " must implement "); Lagra en referens

2018-02-24 Fragment

2018-02-24

2018-02-24 MainActivity Innehåller en FrameLayout som platshållare Lägg i MyListFragment vid oncreate

2018-02-24 MainActivity Innehåller en FrameLayout som platshållare Lägg i MyListFragment vid oncreate

2018-02-24 Vid klick Byt innehållet i FrameLayout till MyDetailsFragment Namn: Kalle Petterson Epost: kalle123@gmail.com Namn: Elinor Karlström Epost: ella97@telia.se Svarade: Kalle

2018-02-24 Stora skärmar En huvud FrameLayout En details FrameLayout Twitter medlemmar: Namn: Kalle Petterson Epost: kalle123@gmail.com Namn: Elinor Karlström Epost: ella97@telia.se Svarade: Kalle

2018-02-24 Att lägga i ett fragment i ramen detailsfragment = new MyDetailsFragment(); FragmentTransaction transaction = getsupportfragmentmanager().begintransaction(); transaction.replace(r.id.frame, detailsfragment); transaction.addtobackstack(null); transaction.commit();

2018-02-24 Att skicka med information // implicit way of sending arguments to the fragment Bundle args = new Bundle(); String groupname = myadapter.getitem(position).tostring(); args.putstring("groupname", groupname); detailsfragment.setarguments(args); I fragmentet: this.groupname = args.getstring("groupname");

2018-02-24 Adapter: matar listan med data

2018-02-24 Adaptern matar listan med data data MyGroups getview MyListFragment listitem adapter MyAdapter GET http:// /grupper server

2018-02-26 MyListAdapter @Override public View getview(int position, View convertview, ViewGroup parent) { // convertview -> textview } textview.settext((mygroups.getitem(position).tostring())); return textview; Referens till data-klassen MyGroups.. Kan vara null!

2018-02-25 MyListAdapter Återanvänd gammal View @Override public View getview(int position, View convertview, ViewGroup parent) { if (convertview == null) { textview = (TextView) myinflater.inflate(itemlayoutfileid, parent, false); } else { textview = (TextView) convertview; }

2018-02-24 MyDetailsFragment direktkontakt med server Twitter medlemmar: Namn: Kalle Petterson Epost: kalle123@gmail.com data MyGroupMembers Namn: Elinor Karlström Epost: ella97@telia.se Svarade: Kalle GET /medlemmar/twitter MyDetailsFragment(Twitter) server

2018-02-25 UI:t måste vara responsivt Appen måste reagera på användarinput inom 5 sekunder (helst 100-200 ms) Annars får användaren en "Application Not Responding" (ANR) dialog

2018-02-25 Trådar Main thread (UI thread) Reseverat för användarinteraktion Visa info Reagera på klick, etc. Cache thread Temporär lagring av hämtade data Worker thread (1, 2, 3,.) För tungt/långsamt arbete i bakgrunden

Hämta data från servern

2018-02-25 Nätverksanrop Volley Googles egna bibliotek http://developer.android.com/training/volley/ind ex.html https://github.com/google/volley/releases AndroidAsyncHttp Populärt bibliotek http://loopj.com/android-async-http/ f

2018-02-25 build.gradle (app) dependencies { compile 'com.android.volley:volley:1.0.0' compile 'com.google.code.gson:gson:2.8.2' }

2018-02-24 Volley

2018-02-25 Volley erbjuder bas-klassen Request Definiera egen klass MyGsonRequest Utgå från exemplet på Android developer pages: https://developer.android.com/training/volley/re quest-custom.html Använd Googles Java bibliotek för JSON: Gson https://github.com/google/gson/blob/master/us erguide.md

2018-02-25 Nätverksanrop Nätverksanrop t.ex. i MyListAdapter: Skapa request = new MyGsonRequest( ) Lägg till request:et i en kö Nätverksanropet sker automagiskt på separat tråd Svar kommer i din lyssnare på main (UI) thread

2018-02-24 Skapa request request = new MyGsonRequest<>( Method.GET http://.../grupper, MyGroups.class, null, // no headers null, // no body, // olika call-backs, dvs. lyssnare) Packa upp JSONresponsen till ett objekt av klassen MyGroups requestqueue.add(request); // don't wait for response

2018-02-24 T.ex. i MyListAdapter request = new MyGsonRequest<>( // method, URL, etc. new Response.Listener<MyGroups>() { @Override public void onresponse(mygroups response) { updategroups(response); } }, Skickar även med lyssnare (callback när respons finns) private void updategroups(mygroups response) { groups = response; notifydatasetchanged(); // broadcast: nya data är tillgängliga! }

2018-02-25 Sekvensdiagram MyListFragment MyAdapter server GET /grupper updategroups() notifydatasetchanged() getview()

2018-02-25 Skicka JSON, vid t.ex. inloggning headers = new HashMap<String, String>(); headers.put( content-type, application/json ); payload = new mylogindata(useremail, userpassword); body = gson.tojson(payload); request = new GsonRequest<>(Method.POST,, headers, body, ); requestqueue.add(request);

2018-02-25 Ta emot token request = new GsonRequest<>( Method.POST, mytokenholder.class, headers, body, ); Packa upp serverresponse till objekt av den här klassen Response { "access_token": server-generated.jwt.here", "token_type": Bearer", "expires_in": 3600 }

2018-02-26 Skicka token i headers headers = new HashMap<String, String>(); headers.put( Authorization, Bearer + accesstoken); request = new GsonRequest<>(, headers, ); requestqueue.add(request);

GsonRequest Bygger ihop requests packar upp response

2018-02-25 GsonRequest public class GsonRequest<T> extends Request<T> { private final Gson gson = new Gson(); public GsonRequest(int method, String url, Class<T> clazz, ) { super(method, url, ); } this.clazz = clazz; Referens till data-klassen MyGroups, el. MyGroupMembers

2018-02-25 GsonRequest (uppackning av response) @Override protected Response<T> parsenetworkresponse(networkresponse response) { try { json = new String(response.data, // encoding info from headers); return Response.success( gson.fromjson(json, clazz), // get response code from headers); }

2018-02-24 Biblioteket Gson Googles egna bibliotek för att parsa JSON direkt till Java objekt Man anger att man vill ha objekt av typen MyGroups.class när man skapar ett request Gson sköter nerpackning och uppackning av data Packar upp data till Java Beans!

2018-02-24 Java Beans Null-konstruktor Var. namn matchar JSON-nycklarna Finns getters och setters för alla var. Möjliggör automatisk uppackning av JSON till objektet

2018-02-24 Mer om GsonRequest (med kodexempel) https://developer.android.com/training/volley/requ est-custom.html

www.liu.se

2018-02-25 ViewModel (ny arkitekturkomponent) Nuvarande problem med ViewModel Hanterar inte fragment lifecycle Detach / attach Utvecklare behöver vara medveten om när onstop p.g.a. rotation, när risk för senare ondestroy Eftersom förra hanteras av ViewModel, men inte senare Funkar inte med Gson Blir därför jobbigare JSON-hantering