Android skodausta

Pyry-Samuli Lahti

Hiiohoi, kullannuput!

Allekirjoittanut on koodaillut salaa timantin tiukkaa Android-looppia. Aiight!

Pari kuukautta sitten näpräilin PyppeGPS -mokkulan. Ohjelma käyttää puhelimen paikannustietoja (network/gps) ja tallentaa niitä KML-formaatin mukaiseen muotoon. Tallennettuja reittejä voi katsoa puhelimella kartasta ja lähettää niitä palvelimelle katseltavaksi Google Mapsista.

Ohessa video, jolla osallistuin em. tekeleellä työnantajani järjestämään ohjelmointikilpaan.

Tänään koodasin Kuntokantaan Android-sovelluksen, jolla voi tallentaa treenejä/muuta dataa helposti suoraan puhelimesta. Ohjelma on ladattavista täältä (koko 71 Kt).

Täytyy sanoa, että Java-ohjelmoijalle Android SDK:n API:t ovat erittäin intuitiivisia, ja alkuun pääsee todella nopeasti. Esimerkiksi HTTP-kutsuihin SDK:ssa on mukana Apachen tuttu ja turvallinen HttpClient, jolla kommunikointi taustapalvelimen kanssa on erittäin helppoa. Tässä lyhyt esimerkki:

public static BackendResponse addWeight(String date, String weight) {
  HttpPost post = new HttpPost(ADD_WEIGHT_URL);
  List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
  nameValuePairs.add(new BasicNameValuePair("date", date));
  nameValuePairs.add(new BasicNameValuePair("weight", weight));

  try {
    post.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
    HttpResponse response = HTTPManager.execute(post);
    int httpResponseCode = response.getStatusLine().getStatusCode();
    if (httpResponseCode != 200) {
      return new BackendResponse(BackendResponseType.ERROR, INVALID_RESPONSE + httpResponseCode);
    }
    String content = CommonUtilities.convertStreamToString(response.getEntity().getContent());
    response.getEntity().consumeContent();
    return getBackendResponse(content);
  } catch (Exception e) {
    return new BackendResponse(BackendResponseType.ERROR, INTERNAL_ERROR);
  }
}

private static BackendResponse getBackendResponse(String jsonContent) throws JSONException {
  JSONObject json = new JSONObject(jsonContent);
  if (!json.isNull("ok")) {
    return new BackendResponse(BackendResponseType.OK, json.getString("ok"));
  } else {
    if (!json.isNull("error")) {
      return new BackendResponse(BackendResponseType.ERROR, json.getString("error"));
    } else {
      return new BackendResponse(BackendResponseType.ERROR, "");
    }
  }
}

Java-lähdekoodia sovellus sisältää 1700 riviä, ja XML-”lähdekoodia” 370 riviä (Android-sovelluksessa monet UI-näkymät voidaan konfiguroida XML:llä). Eipä tule ikävä J2ME- / Symbian-koodausta. o_O

Tässäpä vielä muutama kuva Kuntokanta-sovelluksesta: