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:
@@ -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'
|
||||
}
|
||||
|
||||
|
@@ -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) {
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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());
|
||||
}
|
||||
});
|
||||
|
||||
|
Reference in New Issue
Block a user