Anders blogg

Anders jobbar på Webbgaraget, som är en webbyrå i Uppsala. Här bloggar han om WordPress, Zend Framework och andra verktyg vi använder i vårt arbete.

Förutom webbutveckling tar vi även åt oss uppdrag som handlar om utveckling för iPhone och Android. Vid de tillfällena är det jag som är CAndO medan Erik är iCO. (Vad de betyder? Det får ni räkna ut själva.) Det är verkligen kul med variationen, även om jag ibland saknar mitt TextMate när jag är som mest ingrottad i Eclipse:s jämförelsevis stela editor.

Just nu håller vi på med en applikation som pratar med en webbtjänst för att utbyta information i JSON-format. En viktig grej att tänka på när man kommunicerar med en webbtjänst är att göra HTTP-anropen asynkront, dvs i en annan tråd än UI-tråden, så att appen inte låser sig för användaren. Android har bra hjälpmedel inbyggt för att utföra uppgifter i egna trådar, exempelvis med AsyncTask, men det är ändå ganska omständigt att göra HTTP-anrop så. För det syftet har vi hittat ett Open Source-bibliotek som gör livet lättare för oss. Enter Android Asynchronous Http Client.

I biblioteket medföljer en klient som man anropar för att enkelt göra POST- eller GET-anrop i egna trådar. Till klienten skickar man med en handler för att ta hand om resultatet och för att utföra uppdateringar i UI-tråden när anropet är klart.

I ett simpelt exempel nedan öppnar vi http://www.webbgaraget.se och skriver ut HTML-koden i loggen.

String url = "http://www.webbgaraget.se";
new AsyncHttpClient().get(url, new AsyncHttpResponseHandler() {
  @Override
  public void onSuccess(String response) {
    Log.d("HTTP GET", response);
  }
});

Fel som uppstår vid anropen kan hanteras genom att implementera metoden onFailure() i sin AsyncHttpResponseHandler. Det fina med det här biblioteket är att det kommer laddat med ResponseHandlers speciellt anpassade för JSON-data också, vilket ju för den här appen passade oss utmärkt.

Läs mer om biblioteket på dess hemsida, i dess JavaDoc-dokumentation eller på Github.

Förresten! Glöm inte bort att ange att appen vill ha tillgång till internet i din AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />

Denna kodsnutt lägger du till längst ner, innan sluttaggen </manifest>.

Skrivet av: Anders Lisspers
Kategorier: Inspiration