这是一个相当简单的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
块无法访问{ {1}}。据推测这是一个范围问题。什么是解决这个问题的正确方法?
当我尝试在交换机外部声明arrStr
时,我收到意外的令牌错误:
arrStr
我也尝试了以下方法,但是android studio抱怨 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;
}
}
可能没有被初始化:
arrStr
答案 0 :(得分:0)
尝试像这样声明数组变量(在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();
}