Android skodausta
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: