【发布时间】:2014-07-02 11:04:58
【问题描述】:
在我的应用程序的这一部分,我有一个数据库,它从我的光传感器中吸收数据。它有一个与每一行关联的 RowID。
在后台我有一个 AsyncTaskRunner 正在读取该表并将每一行写入一个 CSV 文件。它应该在向其中写入数据时遍历整个表,查找当前 TID 的所有未复制到 CSV 的行。然后它应该将行值写入 CSV 并返回并将行标记为已复制。
第一个循环应该出现在没有的地方,它会返回数据库游标并查找尚未复制到 CSV 文件的下一行。每次复制到 CSV 后,它应该评估该 CSV 文件的大小以确保它没有满。如果未满,则应返回数据库游标并查找下一行以写入 CSV 文件。如果 isfull 那么它应该循环回到 LoopMain 并重新创建一个新的 CSV 文件来写入。
虽然完整的方法尚未完成,但我正在将行数据写入 CSV 文件的部分。目前,它不写入它。在我将此方法设置为 For 循环之前,它确实如此,现在它没有。我不知道发生了什么变化。我已插入所有这些 Log cmets 以遵循该方法,因为它传递值、接收值然后执行操作以查看失败的位置。该方法传递了要写入 CSV 文件的部分并继续,但文件为空。
public void lightloop(){
//Loop Main
int loopcounter;
LoopMain: for(loopcounter = 0; loopcounter < 4; loopcounter++ ){
Log.d(CSV, "lightloop loopcounter = " + loopcounter);
String CSVFinalFileName=createlightcsv();
Log.w(CSV, "LightLoop, CSVFinalFileName = " + CSVFinalFileName);
//Loop 2
Loop2: for(int useless=1; useless > 0; useless++ ){
String flightRowId = evaluateLightTable(filenamePrefix); //returns the rowid of the first line not transmitted
Log.w(CSV, "LightLoop, flightRowId = " + flightRowId);
Log.d(CSV, "filefullBoolean " + useless);
if(flightRowId != null){
Log.w(CSV, "LightLoop flightRowId is NOT NULL");
//write row to csv
//Get all row values and put into a string
String lightRowValues=fetchLightRowData(flightRowId, filenamePrefix);
Log.w(CSV, "lightLoop, lightRowValues are " + lightRowValues);
//Append that data to the CSV file
Log.w(CSV, "Opening File Output Stream");
try {
FileOutputStream csvfos = mContext.openFileOutput(CSVFinalFileName, Context.MODE_PRIVATE);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
OutputStreamWriter sensorCSVWriter = new OutputStreamWriter(csvfos);
try {
sensorCSVWriter.append("LIGHT " + lightRowValues);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/** try {
sensorCSVWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} **/
//mark row as transmitted
SQLDatabase updatelightrow = new SQLDatabase(mContext);
updatelightrow.open();
SQLDatabase.updateLightRow(flightRowId);
updatelightrow.close();
}// end If rowid is not null
//evaluate size of csv
Boolean filefull = CsvStreamer.checkFileSize(CSVFinalFileName);
if(!filefull){
//return to cursor
Log.d(CSV, "lightloop, File is NOT full");
break Loop2;
}else{
Log.d(CSV, "lightloop, File IS full");
//file is full. close it,
//transmit it,
//open a new one
//goto CSV table and mark it transmitted
break LoopMain;
}
}//end Loop2
}//end LoopMain
}
谁能看到为什么这无法写入文件?
【问题讨论】:
-
我猜它甚至无法编译(除非你有一个名为
csvfos的类字段)。如果你有一个,它很可能没有初始化。 -
我没说它不编译,是不是……
-
所以你的班级确实有一个字段
csvfos。请说明它是如何声明和初始化的。
标签: android outputstream fileoutputstream