package com.evancharlton.mileage; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.List; import android.database.sqlite.SQLiteDatabase; import android.os.Environment; import android.os.Handler; import android.os.Message; import au.com.bytecode.opencsv.CSVReader; public class CSVImporter implements Runnable { private Handler m_handler; public CSVImporter(Handler handler) { m_handler = handler; } @SuppressWarnings("unchecked") public void run() { try { CSVReader csv = new CSVReader(new FileReader(Environment.getExternalStorageDirectory() + "/mileage.csv")); List<String[]> data = csv.readAll(); // columns will be the first line String[] columns = data.get(0); data.remove(0); StringBuilder colStrBuilder = new StringBuilder(); colStrBuilder.append(" ("); for (String col : columns) { colStrBuilder.append(col).append(", "); } colStrBuilder.deleteCharAt(colStrBuilder.length() - 1); colStrBuilder.deleteCharAt(colStrBuilder.length() - 1); colStrBuilder.append(") "); final String COLUMNS = colStrBuilder.toString(); // loop over the rest of the data SQLiteDatabase db = SQLiteDatabase.openDatabase("/data/data/" + Mileage.PACKAGE + "/databases/" + FillUpsProvider.DATABASE_NAME, null, SQLiteDatabase.OPEN_READWRITE); for (String[] row : data) { StringBuilder sql = new StringBuilder(); sql.append("INSERT INTO ").append(FillUpsProvider.FILLUPS_TABLE_NAME).append(COLUMNS).append("VALUES ("); for (int i = 0; i < row.length; i++) { sql.append("?"); if (i != row.length - 1) { sql.append(", "); } } sql.append(");"); db.execSQL(sql.toString(), row); } db.close(); m_handler.post(new Runnable() { public void run() { Message msg = new Message(); msg.what = 0; msg.arg1 = R.string.import_done_msg; msg.arg2 = R.string.import_done; msg.obj = "mileage.csv"; m_handler.handleMessage(msg); } }); } catch (final FileNotFoundException e) { e.printStackTrace(); m_handler.post(new Runnable() { public void run() { Message msg = new Message(); msg.what = 0; msg.obj = e.getLocalizedMessage(); msg.arg2 = R.string.error_importing_data; m_handler.handleMessage(msg); } }); } catch (final IOException e) { e.printStackTrace(); m_handler.post(new Runnable() { public void run() { Message msg = new Message(); msg.what = 0; msg.obj = e.getLocalizedMessage(); msg.arg2 = R.string.error_importing_data; m_handler.handleMessage(msg); } }); } } }