1
0
mirror of https://github.com/oliexdev/openScale.git synced 2025-08-26 09:44:31 +02:00

Replaced CSV export/import function with SimpleCSV library source code

This commit is contained in:
OliE
2018-01-05 18:35:14 +01:00
parent 49a69f1ebc
commit 3432bbf21d
4 changed files with 45 additions and 110 deletions

View File

@@ -37,15 +37,16 @@ ext {
}
dependencies {
compile "com.android.support:design:${supportLibVersion}"
compile "com.android.support:support-v4:${supportLibVersion}"
compile "com.android.support:appcompat-v7:${supportLibVersion}"
compile 'com.github.lecho:hellocharts-library:1.5.8@aar'
compile 'android.arch.persistence.room:runtime:1.0.0'
compile 'junit:junit:4.12'
compile 'android.arch.persistence.room:testing:1.0.0'
compile 'com.android.support.test:runner:1.0.0'
compile 'com.android.support.test:rules:1.0.0'
implementation "com.android.support:design:${supportLibVersion}"
implementation "com.android.support:support-v4:${supportLibVersion}"
implementation "com.android.support:appcompat-v7:${supportLibVersion}"
implementation 'com.github.lecho:hellocharts-library:1.5.8@aar'
implementation 'com.j256.simplecsv:simplecsv:2.2'
implementation 'android.arch.persistence.room:runtime:1.0.0'
implementation 'junit:junit:4.12'
implementation 'android.arch.persistence.room:testing:1.0.0'
implementation 'com.android.support.test:runner:1.0.0'
implementation 'com.android.support.test:rules:1.0.0'
annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'
}

View File

@@ -40,14 +40,10 @@ import com.health.openscale.core.database.ScaleUserDatabase;
import com.health.openscale.core.datatypes.ScaleMeasurement;
import com.health.openscale.core.datatypes.ScaleUser;
import com.health.openscale.gui.fragments.FragmentUpdateListener;
import com.j256.simplecsv.processor.CsvProcessor;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -277,85 +273,34 @@ public class OpenScale {
updateScaleData();
}
public void importData(String filename) throws IOException {
File file = new File(filename);
FileInputStream inputStream = new FileInputStream(file);
InputStreamReader inputReader = new InputStreamReader(inputStream);
BufferedReader csvReader = new BufferedReader(inputReader);
String line = csvReader.readLine();
public void importData(String filename) {
CsvProcessor<ScaleMeasurement> csvProcessor = new CsvProcessor<ScaleMeasurement>(ScaleMeasurement.class).withHeaderValidation(true).withFlexibleOrder(true);
File csvFile = new File(filename);
try {
while (line != null) {
String csvField[] = line.split(",", -1);
if (csvField.length < 9) {
throw new IOException("Can't parse CSV file. Field length is wrong.");
}
ScaleMeasurement newScaleMeasurement = new ScaleMeasurement();
newScaleMeasurement.setDateTime(dateTimeFormat.parse(csvField[0]));
newScaleMeasurement.setWeight(Float.parseFloat(csvField[1]));
newScaleMeasurement.setFat(Float.parseFloat(csvField[2]));
newScaleMeasurement.setWater(Float.parseFloat(csvField[3]));
newScaleMeasurement.setMuscle(Float.parseFloat(csvField[4]));
newScaleMeasurement.setLbw(Float.parseFloat(csvField[5]));
newScaleMeasurement.setBone(Float.parseFloat(csvField[6]));
newScaleMeasurement.setWaist(Float.parseFloat(csvField[7]));
newScaleMeasurement.setHip(Float.parseFloat(csvField[8]));
newScaleMeasurement.setComment(csvField[9]);
newScaleMeasurement.setUserId(getSelectedScaleUser().getId());
measurementDAO.insert(newScaleMeasurement);
line = csvReader.readLine();
}
List<ScaleMeasurement> csvScaleMeasurementList = csvProcessor.readAll(csvFile, null);
measurementDAO.insertAll(csvScaleMeasurementList);
updateScaleData();
Toast.makeText(context, context.getString(R.string.info_data_imported) + " /sdcard" + filename, Toast.LENGTH_SHORT).show();
} catch (IOException e) {
Toast.makeText(context, context.getString(R.string.error_importing) + e.getMessage(), Toast.LENGTH_SHORT).show();
} catch (ParseException e) {
throw new IOException("Can't parse date format. Please set the date time format as <dd.MM.yyyy HH:mm> (e.g. 31.10.2014 05:23)");
} catch (NumberFormatException e) {
throw new IOException("Can't parse float number (" + e.getMessage()+")");
} catch (ArrayIndexOutOfBoundsException e) {
throw new IOException("Can't parse format column number mismatch");
Toast.makeText(context, context.getString(R.string.error_importing) + e.getMessage(), Toast.LENGTH_SHORT).show();
}
updateScaleData();
csvReader.close();
inputReader.close();
}
public void exportData(String filename) throws IOException {
File file = new File(filename);
file.createNewFile();
public void exportData(String filename) {
CsvProcessor<ScaleMeasurement> csvProcessor = new CsvProcessor<ScaleMeasurement>(ScaleMeasurement.class);
FileOutputStream outputStream = new FileOutputStream(file);
File csvFile = new File(filename);
OutputStreamWriter csvWriter = new OutputStreamWriter(outputStream);
for (ScaleMeasurement scaleMeasurement : scaleMeasurementList) {
csvWriter.append(dateTimeFormat.format(scaleMeasurement.getDateTime()) + ",");
csvWriter.append(Float.toString(scaleMeasurement.getWeight()) + ",");
csvWriter.append(Float.toString(scaleMeasurement.getFat()) + ",");
csvWriter.append(Float.toString(scaleMeasurement.getWater()) + ",");
csvWriter.append(Float.toString(scaleMeasurement.getMuscle()) + ",");
csvWriter.append(Float.toString(scaleMeasurement.getLbw()) + ",");
csvWriter.append(Float.toString(scaleMeasurement.getBone()) + ",");
csvWriter.append(Float.toString(scaleMeasurement.getWaist()) + ",");
csvWriter.append(Float.toString(scaleMeasurement.getHip()) + ",");
if (!scaleMeasurement.getComment().isEmpty()) {
csvWriter.append(scaleMeasurement.getComment());
}
csvWriter.append("\n");
try {
csvProcessor.writeAll(csvFile, scaleMeasurementList, true);
Toast.makeText(context, context.getString(R.string.info_data_exported) + " /sdcard" + filename, Toast.LENGTH_SHORT).show();
} catch (IOException e) {
Toast.makeText(context, context.getResources().getString(R.string.error_exporting) + " " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
csvWriter.close();
outputStream.close();
}
public void clearScaleData(int userId) {

View File

@@ -21,6 +21,8 @@ import android.arch.persistence.room.Entity;
import android.arch.persistence.room.Index;
import android.arch.persistence.room.PrimaryKey;
import com.j256.simplecsv.common.CsvColumn;
import java.util.Date;
@Entity(tableName = "scaleMeasurements", indices = {@Index(value = {"datetime"}, unique = true)})
@@ -31,28 +33,39 @@ public class ScaleMeasurement {
@PrimaryKey(autoGenerate = true)
private int id;
@CsvColumn
@ColumnInfo(name = "userId")
private int userId;
@ColumnInfo(name = "enabled")
private boolean enabled;
@CsvColumn (format = "dd.MM.yyyy HH:mm")
@ColumnInfo(name = "datetime")
private Date dateTime;
@CsvColumn
@ColumnInfo(name = "weight")
private float weight;
@CsvColumn
@ColumnInfo(name = "fat")
private float fat;
@CsvColumn
@ColumnInfo(name = "water")
private float water;
@CsvColumn
@ColumnInfo(name = "muscle")
private float muscle;
@CsvColumn
@ColumnInfo(name = "lbw")
private float lbw;
@CsvColumn
@ColumnInfo(name = "waist")
private float waist;
@CsvColumn
@ColumnInfo(name = "hip")
private float hip;
@CsvColumn
@ColumnInfo(name = "bone")
private float bone;
@CsvColumn
@ColumnInfo(name = "comment")
private String comment;

View File

@@ -42,7 +42,6 @@ import android.widget.ListView;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;
import com.health.openscale.R;
import com.health.openscale.core.OpenScale;
@@ -65,7 +64,6 @@ import com.health.openscale.gui.views.WaistMeasurementView;
import com.health.openscale.gui.views.WaterMeasurementView;
import com.health.openscale.gui.views.WeightMeasurementView;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -290,19 +288,8 @@ public class TableFragment extends Fragment implements FragmentUpdateListener {
filenameDialog.setPositiveButton(getResources().getString(R.string.label_ok), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
boolean isError = false;
try {
OpenScale.getInstance(getContext()).importData(Environment.getExternalStorageDirectory().getPath() + txtFilename.getText().toString());
} catch (IOException e) {
Toast.makeText(tableView.getContext(), getResources().getString(R.string.error_importing) + " " + e.getMessage(), Toast.LENGTH_SHORT).show();
isError = true;
}
if (!isError) {
Toast.makeText(tableView.getContext(), getResources().getString(R.string.info_data_imported) + " /sdcard" + txtFilename.getText().toString(), Toast.LENGTH_SHORT).show();
updateOnView(OpenScale.getInstance(getContext()).getScaleMeasurementList());
}
OpenScale.getInstance(getContext()).importData(Environment.getExternalStorageDirectory().getPath() + txtFilename.getText().toString());
updateOnView(OpenScale.getInstance(getContext()).getScaleMeasurementList());
}
});
@@ -332,18 +319,7 @@ public class TableFragment extends Fragment implements FragmentUpdateListener {
filenameDialog.setPositiveButton(getResources().getString(R.string.label_ok), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
boolean isError = false;
try {
OpenScale.getInstance(getContext()).exportData(Environment.getExternalStorageDirectory().getPath() + txtFilename.getText().toString());
} catch (IOException e) {
Toast.makeText(tableView.getContext(), getResources().getString(R.string.error_exporting) + " " + e.getMessage(), Toast.LENGTH_SHORT).show();
isError = true;
}
if (!isError) {
Toast.makeText(tableView.getContext(), getResources().getString(R.string.info_data_exported) + " /sdcard" + txtFilename.getText().toString(), Toast.LENGTH_SHORT).show();
}
OpenScale.getInstance(getContext()).exportData(Environment.getExternalStorageDirectory().getPath() + txtFilename.getText().toString());
}
});