実際には2つの質問:
主な質問: ファイルを書き出す際に単純なロジックを使用できないというのは本当ではないことを願っています!!! 通常はonCreateによって呼び出される画面に動的リストをロードするためのカーソルがあります。それはうまくいきます。ここで、バックアップとして「sdCard」に書き出す必要があります。(時計が初日にリセットされる場合は、リロードします。また、キーボードを備えた PC からエントリを追加することもできます。)
私は、既存のカーソルを呼び出すのが最善の方法であると判断しましたが、それを書き出すことを示すスイッチを設定しました。ファイルには try - catch が必要なので、open、write、close の周りに置きました。「ライター」は定義されていません。そのため、括弧がなくても機能する1つの「TRY」内にすべてを入れました-「IF」はありません。
ただし、「IF (--SWITCH SET)」{---writer.write(strBuRec); を追加します。..}" これには {--} が必要です。ここでも、ライターは未定義です。
私が何か間違ったことをしていることを願っています(おそらく何かばかげたことです)!コードを 2 番目のカーソルにコピーすることはできますが、したくありません。
2 番目の質問: クローズ カーソル (//cursor.close();) がコメント アウトされていることに注意してください。これは、画面を再描画するか、この場合、カーソルを再度呼び出してファイルを書き出すと、カーソルが閉じられるためです。カーソルを閉じると、カーソルを一度しかロードできません。
注: これは私の WIMMOne 用のシンプルなアプリなので、バージョン 7 が必要です。
どうもありがとう、クラーク
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor)
{
Log.d("EventLst","0 LoadFin");
int iRecNo = 0;
iBuCnt = 0;
mAdapter.swapCursor(cursor);
//----------------------------------------
// if exporting, open the file
try
{
if (strRunBu == "Y")
{
FileWriter writer;
String path = Environment.getExternalStorageDirectory().getAbsoluteFile() + "/Event";
File dir = new File(path);
Log.d("Eventfile","00 File:" + dir);
File flEvent = new File(dir, "EVENT.TXT");
boolean canIWrite = dir.canWrite();
Log.d("Eventfile","0 File:" + flEvent + "=" + canIWrite);
flEvent.createNewFile();
Log.d("Eventfile","1 File:" + flEvent);
writer = new FileWriter(flEvent);
}
// ------------------------------------------
// Insert dummy first record to serve as a label
//
String strBuRec = "";
strRecord.clear();
strRecord.add(0, "mm-dd-yy: Event name");
cursor.moveToFirst();
Log.d("EventLst","1 LoadFin DO");
// ----------------------------------------
// Read from cursor and add each record to list
while (cursor.isAfterLast() == false)
{
iRecNo = iRecNo + 1;
// - Table has 4 columns, read them into string array: strC
String strC[] = { (cursor.getString(0)), (cursor.getString(1)),
(cursor.getString(2)), (cursor.getString(3))
};
// - The fourth column is the date/time in milliseconds since
// January 1,1970
// convert to date in yyyy-mm-dd format
String strDateMil = (cursor.getString(3));
long lgDate = cursor.getLong(3);
Log.d("EventLst","4 LoadCSR:" + "I:" + iRecNo + "Ld:" + lgDate);
SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yy");
String strDate = dateFormat.format(new Date(lgDate));
// - Concatenate date and event into one string, add to table
strRecord.add(iRecNo, strDate + ": " + strC[2]);
// - save record number for each event in strRecId
// - Records are sorted by date, so we need to save RowId to pass
// - to edit screen
strRecId.add((cursor.getString(0)));
//---------------------------
// if-creating export file, write a record
if (strRunBu == "Y")
{
dateFormat = new SimpleDateFormat("HH:mm");
String strTime = dateFormat.format(new Date(lgDate));
strBuRec = ( (cursor.getString(1)) + "," + (cursor.getString(2))
+ "," + strDate + "," + strTime + "\r\n" );
Log.d("EventLst","4 LoadCSR:" + "BU:" + strBuRec);
// ERROR: writer cannot be resolved ??????????
writer.write(strBuRec);
Log.d("Eventfile","4 File:" + "wrote");
}
strEventRec.add(iBuCnt, strBuRec);
iBuCnt = iBuCnt + 1;
cursor.moveToNext();
} // ----end of while loop
//------------------------------------
// COULD NOT CLOSE THE CURSOR?????
//cursor.close();
//------------------------------------
if (strRunBu == "Y")
{
// ERROR: writer cannot be resolved ???????????
writer.flush();
// ERROR: writer cannot be resolved ???????????
writer.close();
};
} //---> BACKTO try
catch (IOException e)
{
Toast.makeText(getActivity(), "Close ER"+ e,
Toast.LENGTH_SHORT).show();
}
Log.d("Eventfile","4 File:" + "Closed");
strRunBu = "N";
lstAdapter = new ArrayAdapter<String>(getActivity(),
R.layout.event_row, R.id.text1, strRecord);
// * Call to SetListAdapter()informs ListFragment how to fill ListView
// * here use ArrayAdapter
setListAdapter(lstAdapter);
// Log.d("EventLst","8 LoadCSR:" + "ALLDONE");
}