这是一个相当简单的Java范围界定问题,但是我对Java还是很陌生,很难解决这个问题。具体来说,这是针对Android应用程序的,但是我不确定这个问题是否重要
我有一种方法将采用SQLite表数据并将其写到CSV文件中。根据要传递给方法的数据类型,我想从其他表中写入数据:
public void exportSubjectData(File outputFile, String subNum, String sensorType) throws IOException, SQLException {
csvWrite = new CSVWriter(new FileWriter(outputFile));
switch (sensorType) {
case "acc": {
curCSV = db.rawQuery("SELECT * FROM " + DATA_ACC_TABLE_NAME + " WHERE id = " + subNum, null);
String arrStr[] = {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2),
curCSV.getString(3), curCSV.getString(4)};
break;
}
case "gyro": {
curCSV = db.rawQuery("SELECT * FROM " + DATA_GYRO_TABLE_NAME + " WHERE id = " + subNum, null);
String arrStr[] = {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2)};
break;
}
}
csvWrite.writeNext(curCSV.getColumnNames());
while (curCSV.moveToNext()) {
csvWrite.writeNext(arrStr);
}
csvWrite.close();
curCSV.close();
}
我的问题是,根据sensorType
传入的内容,我想1)从其他表中选择,2)写出不同数量的列。我arrStr
在switch
块中进行声明和初始化,但是当我尝试将每一列写入CSV时,该while
块无权访问arrStr
。大概这是一个范围界定问题。解决此问题的正确方法是什么?
当我尝试arrStr
在交换机外部声明时,出现意外的令牌错误:
String[] arrStr;
switch (sensorType) {
case "acc": {
curCSV = db.rawQuery("SELECT * FROM " + DATA_ACC_TABLE_NAME + " WHERE id = " + subNum, null);
arrStr[] = {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2),curCSV.getString(3), curCSV.getString(4)};
break;
}
case "gyro": {
curCSV = db.rawQuery("SELECT * FROM " + DATA_GYRO_TABLE_NAME + " WHERE id = " + subNum, null);
arrStr[] = {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2),curCSV.getString(3), curCSV.getString(4)};
break;
}
}
我也尝试了以下方法,但是android studio抱怨arrStr
可能尚未初始化:
String[] arrStr;
switch (sensorType) {
case "acc": {
curCSV = db.rawQuery("SELECT * FROM " + DATA_ACC_TABLE_NAME + " WHERE id = " + subNum, null);
arrStr = new String[]{curCSV.getString(0), curCSV.getString(1), curCSV.getString(2),curCSV.getString(3), curCSV.getString(4)};
break;
}
case "gyro": {
curCSV = db.rawQuery("SELECT * FROM " + DATA_GYRO_TABLE_NAME + " WHERE id = " + subNum, null);
arrStr = new String[]{curCSV.getString(0), curCSV.getString(1), curCSV.getString(2),curCSV.getString(3), curCSV.getString(4)};
break;
}
}
尝试这样声明数组变量(在之外switch
):
public void exportSubjectData(File outputFile, String subNum, String sensorType) throws IOException, SQLException {
csvWrite = new CSVWriter(new FileWriter(outputFile));
String arrStr[] = null;
switch (sensorType) {
case "acc": {
curCSV = db.rawQuery("SELECT * FROM " + DATA_ACC_TABLE_NAME + " WHERE id = " + subNum, null);
arrStr = new String[] {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2),
curCSV.getString(3), curCSV.getString(4)};
break;
}
case "gyro": {
curCSV = db.rawQuery("SELECT * FROM " + DATA_GYRO_TABLE_NAME + " WHERE id = " + subNum, null);
arrStr = new String[] {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2)};
break;
}
}
csvWrite.writeNext(curCSV.getColumnNames());
while (curCSV.moveToNext()) {
csvWrite.writeNext(arrStr);
}
csvWrite.close();
curCSV.close();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句