これはかなり単純なJavaスコープの質問ですが、私はJavaを使い慣れていないし、これを理解するのに問題があります。具体的には、これはAndroidアプリケーション用ですが、私はこの質問のために重要であるとは確信していませんループ内のJava文字列配列のスコープ
私は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;
}
}
私は次のようなアプローチをも試してみましたが、アンドロイドスタジオはarrStr
がintializedされていない可能性がどのように文句を言う:
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;
}
}
スイッチケースの上に文字列arrStr []を宣言します。あなたのコードでは、arrStrのスコープはcaseブロックでのみ制限されています。 –
'String [] arrStr == null'修正が'初期化されていない可能性があります '警告 –
' String [] arrStr = {}; 'より良いでしょう。また、@Vasilyは、 '=='ではなく、 '='だけをここに入れたいだけです。 –