循环中的Java字符串数组范围

时间:2016-05-24 04:26:24

标签: java android scope

这是一个相当简单的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

1 个答案:

答案 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();
}