Java tutorial
package org.starfishrespect.myconsumption.android.tasks; import android.os.AsyncTask; import org.codehaus.jackson.map.ObjectMapper; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.ResourceAccessException; import org.starfishrespect.myconsumption.android.SingleInstance; import org.starfishrespect.myconsumption.android.dao.DatabaseHelper; import org.starfishrespect.myconsumption.android.data.KeyValueData; import org.starfishrespect.myconsumption.android.data.SensorData; import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter; import org.springframework.web.client.RestTemplate; import org.starfishrespect.myconsumption.android.util.CryptoUtils; import org.starfishrespect.myconsumption.server.api.dto.StatDTO; import java.io.IOException; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import static org.starfishrespect.myconsumption.android.util.LogUtils.LOGD; import static org.starfishrespect.myconsumption.android.util.LogUtils.LOGE; import static org.starfishrespect.myconsumption.android.util.LogUtils.makeLogTag; /** * Get statistics values from the server using an AsyncTask * S23Y (2015). Licensed under the Apache License, Version 2.0. * Author: Thibaud Ledent */ public class StatValuesUpdater { public interface StatUpdateFinishedCallback { public void onStatUpdateFinished(); } private StatUpdateFinishedCallback statUpdateFinishedCallback; private static final String TAG = makeLogTag(StatValuesUpdater.class); public void setUpdateFinishedCallback(StatUpdateFinishedCallback updateFinishedCallback) { this.statUpdateFinishedCallback = updateFinishedCallback; } public void refreshDB() { AsyncTask<Void, List, Void> task = new AsyncTask<Void, List, Void>() { @Override protected Void doInBackground(Void... params) { DatabaseHelper db = SingleInstance.getDatabaseHelper(); RestTemplate template = new RestTemplate(); HttpHeaders httpHeaders = CryptoUtils.createHeadersCurrentUser(); ResponseEntity<StatDTO[]> responseEnt; template.getMessageConverters().add(new MappingJacksonHttpMessageConverter()); try { for (SensorData sensor : db.getSensorDao().queryForAll()) { // Stats String url = String.format(SingleInstance.getServerUrl() + "stats/sensor/%s", sensor.getSensorId()); responseEnt = template.exchange(url, HttpMethod.GET, new HttpEntity<>(httpHeaders), StatDTO[].class); StatDTO[] statsArray = responseEnt.getBody(); List<StatDTO> stats = new ArrayList<>(Arrays.asList(statsArray)); ObjectMapper mapper = new ObjectMapper(); try { String json = mapper.writeValueAsString(stats); String key = "stats_" + sensor.getSensorId(); int id = db.getIdForKey(key); KeyValueData valueData = new KeyValueData(key, json); valueData.setId(id); LOGD(TAG, "writing stat in local db: " + json); db.getKeyValueDao().createOrUpdate(valueData); } catch (IOException e) { LOGD(TAG, "Cannot create stats " + stats.toString(), e); } } } catch (SQLException e) { LOGD(TAG, "Cannot create stats ", e); } catch (ResourceAccessException | HttpClientErrorException e) { LOGE(TAG, "Cannot access server ", e); } return null; } @Override protected void onPostExecute(Void aVoid) { if (statUpdateFinishedCallback != null) { statUpdateFinishedCallback.onStatUpdateFinished(); } } }; task.execute(); } }