gpt4 book ai didi

java - 在 Android 中使用 openCSV 导出 CSV

转载 作者:行者123 更新时间:2023-11-30 03:00:56 26 4
gpt4 key购买 nike

我正在尝试将整个表从我的本地 sqlite 数据库导出到一个 .csv 文件中,并使用 opencsv 库将其存储在我的 sdcard 上。

导出代码

private ArrayList<ChartTable> mChartList;
private String[] mExport;

private void exportCsv() {
mDatabaseHelper = new DatabaseHelper(this);
try {
mWriter = new CSVWriter(new FileWriter(Environment.getExternalStorageDirectory().getAbsolutePath() + "/charts.csv"));
mChartList = mDatabaseHelper.getChartsList();
mExport = mChartList.toArray(new String[mChartList.size()]);
mWriter.writeNext(mExport);
mWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}

getChartsList()

public ArrayList<ChartTable> getChartsList() {
SQLiteDatabase db = this.getReadableDatabase();
ArrayList<ChartTable> chartsList = new ArrayList<ChartTable>();
String[] sumColumns = {
ID_COL + ", "
+ USER_ID_COL + ", "
+ PATIENT_ID_COL + ", "
+ FIRST_NAME_COL + ", "
+ LAST_NAME_COL + ", "
+ DOB_COL + ", "
+ PHONE_COL + ", "
+ PHOTO_PATH_COL + ", "
+ TIME_STAMP_COL
};
Cursor c = db.query(true, CHART_TABLE, sumColumns, null, null, null, null, null, null);

if (c.moveToFirst()) {
do {
ChartTable ct = new ChartTable();
ct.setId(c.getInt(c.getColumnIndex(ID_COL)));
ct.setUserId((c.getString(c.getColumnIndex(USER_ID_COL))));
ct.setPatientId((c.getString(c.getColumnIndex(PATIENT_ID_COL))));
ct.setFirstName((c.getString(c.getColumnIndex(FIRST_NAME_COL))));
ct.setLastName(c.getString(c.getColumnIndex(LAST_NAME_COL)));
ct.setDob(c.getString(c.getColumnIndex(DOB_COL)));
ct.setPhone(c.getString(c.getColumnIndex(PHONE_COL)));
ct.setPhoto(c.getString(c.getColumnIndex(PHOTO_PATH_COL)));
ct.setTimeStamp(c.getString(c.getColumnIndex(TIME_STAMP_COL)));
chartsList.add(ct);
} while (c.moveToNext());
}
c.close();
db.close();

return chartsList;
}

LogCat

03-21 03:14:41.558: E/AndroidRuntime(1494): FATAL EXCEPTION: main
03-21 03:14:41.558: E/AndroidRuntime(1494): java.lang.ArrayStoreException: source[0] of type com.xxxxxx.models.ChartTable cannot be stored in destination array of type java.lang.String[]
03-21 03:14:41.558: E/AndroidRuntime(1494): at java.lang.System.arraycopy(Native Method)
03-21 03:14:41.558: E/AndroidRuntime(1494): at java.util.ArrayList.toArray(ArrayList.java:519)
03-21 03:14:41.558: E/AndroidRuntime(1494): at com.xxxxxx.activities.ImportExportActivity.exportCsv(ImportExportActivity.java:66)
03-21 03:14:41.558: E/AndroidRuntime(1494): at com.xxxxxx.activities.ImportExportActivity.access$1(ImportExportActivity.java:61)
03-21 03:14:41.558: E/AndroidRuntime(1494): at com.xxxxxx.activities.ImportExportActivity$2.onClick(ImportExportActivity.java:51)
03-21 03:14:41.558: E/AndroidRuntime(1494): at android.view.View.performClick(View.java:4204)

我很清楚这个错误,我无法转换 ArrayList<ChartTable>String[] .此外,我的逻辑是有缺陷的。如您所见,ArrayList<ChartTable>包含许多 ChartTable 对象,这些对象分别包含我希望在每个 CSV 行中输出的字符串。所以我实际上需要从我的 ArrayList<ChartTable> 中获取每个 ChartTable 对象如果我想使用此方法,请将其转换为 String[]。现在我在想,也许我正在尝试将方形钉子装入圆孔中。

根据这些信息,执行我正在尝试的操作的正确方法是什么?有没有更简单的方法来转储整个表?或者我应该简单地拉出每个 ChartTable 对象并遍历它们。

感谢您的宝贵时间。如果需要任何进一步的信息,请询问。

最佳答案

虽然我仍在寻找“更好”的解决方案,但我用它来解决了我的问题。

private void exportChartCsv() {
mDatabaseHelper = new DatabaseHelper(this);
try {
mWriter = new CSVWriter(new FileWriter(Environment.getExternalStorageDirectory().getAbsolutePath() + "/charts.csv"));
mChartList = mDatabaseHelper.getChartsList();
String[] mExportChartHeaders = {
"Chart ID",
"User ID",
"Patient ID",
"First Name",
"Last Name",
"Date of Birth",
"Telephone Number",
"Photo Path",
"TimeStamp",
"Questions Completed"
};

mWriter.writeNext(mExportChartHeaders);

for (ChartTable chartTable : mChartList) {
mId = String.valueOf(chartTable.getId());
mUserId = chartTable.getUserId();
mPatientId = chartTable.getPatientId();
mFirstName = chartTable.getFirstName();
mLastName = chartTable.getLastName();
mDateOfBirth = chartTable.getDob();
mTelephoneNumber = chartTable.getPhone();
mPhotoPath = chartTable.getPhoto();
mTimeStamp = chartTable.getTimeStamp();
mQuestionsCompleted = String.valueOf(chartTable.getQuestionsCompleted());

String[] mExportChart = {mId, mUserId, mPatientId, mFirstName, mLastName, mDateOfBirth, mTelephoneNumber, mPhotoPath, mTimeStamp, mQuestionsCompleted};
mWriter.writeNext(mExportChart);
}
mWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
mDatabaseHelper.close();
}

虽然我认为这不是最好的解决方案,但它非常简单易懂。如果有人提出更好的解决方案,我会很乐意接受他们的回答

关于java - 在 Android 中使用 openCSV 导出 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22549555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com