@Override public void onNewShieldFrameReceived(ShieldFrame frame) { if (frame.getShieldId() == UIShield.DATA_LOGGER.getId()) { switch (frame.getFunctionId()) { case START_LOGGING: if (frame.getArguments().size() > 0) fileName = frame.getArgumentAsString(0); else fileName = null; headerList = new CopyOnWriteArrayList<String>(); dataSet = new ArrayList<Map<String, String>>(); rowData = new HashMap<String, String>(); currentStatus = LOGGING; isStarted = true; if (eventHandler != null) { eventHandler.onStartLogging(); } break; case STOP_LOGGING: saveData(); break; case ADD_STRING: if (isStarted) { currentStatus = LOGGING; String key = frame.getArgumentAsString(0); String value = frame.getArgumentAsString(1); if (!headerList.contains(key)) headerList.add(key); rowData.put(key, value); if (eventHandler != null) { eventHandler.onAdd(key, value); } } break; case ADD_FLOAT: if (isStarted) { currentStatus = LOGGING; String keyFloat = frame.getArgumentAsString(0); String valueFloat = frame.getArgumentAsFloat(1) + ""; if (!headerList.contains(keyFloat)) headerList.add(keyFloat); rowData.put(keyFloat, valueFloat); if (eventHandler != null) { eventHandler.onAdd(keyFloat, valueFloat); } } break; case LOG: if (isStarted) { currentStatus = LOGGING; if (eventHandler != null) { eventHandler.onLog(new HashMap<>(rowData)); } if (!headerList.contains("Time")) headerList.add("Time"); rowData.put( "Time", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US) .format(new Date()) .toString()); // rowData.remove("Time"); dataSet.add(new HashMap<>(rowData)); rowData = new HashMap<>(); } break; default: break; } } }
private void saveData() { if (isStarted) { isStarted = false; ICsvMapWriter mapWriter = null; try { currentStatus = STOPPED_LOGGING; if (eventHandler != null) { eventHandler.onStopLogging(dataSet); } File folder = new File(Environment.getExternalStorageDirectory() + "/OneSheeld"); if (!folder.exists()) { folder.mkdirs(); } folder = new File(Environment.getExternalStorageDirectory() + "/OneSheeld/DataLogger"); if (!folder.exists()) { folder.mkdirs(); } mapWriter = new CsvMapWriter( new FileWriter( Environment.getExternalStorageDirectory() + "/OneSheeld/DataLogger/" + (fileName == null || fileName.length() == 0 ? new Date().getTime() + "" : fileName + " - " + new Date().getTime()) + ".csv"), CsvPreference.STANDARD_PREFERENCE); final CellProcessor[] processors = new CellProcessor[headerList.size()]; for (int i = 0; i < processors.length; i++) { processors[i] = new Optional(); } // write the header header = new String[headerList.size()]; int i = 0; for (String headerItem : headerList) { header[i] = headerItem; i++; } mapWriter.writeHeader(header); // write the customer Maps for (Map<String, String> value : dataSet) { mapWriter.write(value, header, processors); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (mapWriter != null) { try { mapWriter.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // reset(); } } } }