📄 gpsdatalogger.java
字号:
File f = new File("gpsDataLogger_"+szDateTime+".csv",File.CREATE);//change file name to gpsDataLogger <timestamp>.csv
ResultSet rs = driver.executeQuery("select rowid,time_stamp,species,surveycount,location,terrain,latitude,latns,longitude,longew,sky,water,overall,live from surveyDB");
rs.first();
int iRowCount = rs.getRowCount();
int i = 0;
while(i <= iRowCount) {
if (iFlag !=0){
sb=(rs.getString("time_stamp"));
sb=sb+","+(rs.getString("species"));
sb=sb+","+(rs.getString("surveycount"));
sb=sb+","+(rs.getString("location"));
sb=sb+","+(rs.getString("terrain"));
sb=sb+","+(rs.getString("latitude"));
sb=sb+","+(rs.getString("latns"));
sb=sb+","+(rs.getString("longitude"));
sb=sb+","+(rs.getString("longew"));
sb=sb+","+(rs.getString("sky"));
sb=sb+","+(rs.getString("water"));
sb=sb+","+(rs.getString("overall"));
sb=sb+","+(rs.getString("live"));
sb=sb+","+(rs.getString("rowid"));
rs.next();
}else{
}
byte []buf = sb.getBytes();
f.writeBytes(buf,0,buf.length);
f.writeBytes(enter,0,2);
++i;
iFlag = 1;
} rs.close();
}
/*********************************************************************************
* Makes .csv file on the device of the trackLog data table
**********************************************************************************/
protected void makeCsvFileTrackLog(){
int iTrackLogFlag = 0;//sets up header row on first iteration through while loop
String sb = "Time_stamp,Latitude,N-S,Longitude,E-W,RowID";
String szDateTime; //creates timestamp for the filename
long T = new Time().getTimeLong();
szDateTime = Convert.toString(T,1);
File f = new File("trackLog_"+szDateTime+".csv",File.CREATE);
ResultSet rs = driver.executeQuery("select rowid,time_stamp,latitude,latns,longitude,longew from trackLog");
rs.first();
int iRowCount = rs.getRowCount();
int i = 0;
while(i <= iRowCount) {
if (iTrackLogFlag !=0){
sb=(rs.getString("time_stamp"));
sb=sb+","+(rs.getString("latitude"));
sb=sb+","+(rs.getString("latns"));
sb=sb+","+(rs.getString("longitude"));
sb=sb+","+(rs.getString("longew"));
sb=sb+","+(rs.getString("rowid"));
rs.next();
}else{
}
byte []buf = sb.getBytes();
f.writeBytes(buf,0,buf.length);
f.writeBytes(enter,0,2);
++i;
iTrackLogFlag = 1;
} rs.close();
}
public void InterceptSystemKeys(){
//Vm.interceptSystemKeys(Vm.SK_ALL | Vm.SK_LAUNCH);
waba.sys.Vm.interceptSystemKeys(
//WinCE
waba.sys.Vm.SK_HARD1 |
waba.sys.Vm.SK_HARD2 |
waba.sys.Vm.SK_HARD3 |
waba.sys.Vm.SK_HARD4 |
waba.sys.Vm.SK_PAGE_DOWN |
waba.sys.Vm.SK_PAGE_LEFT |
waba.sys.Vm.SK_PAGE_RIGHT |
waba.sys.Vm.SK_PAGE_UP|
//additional palmOS silkscreened keys
waba.sys.Vm.SK_SYNC | // Hotsync
waba.sys.Vm.SK_FIND | // Search/Find
waba.sys.Vm.SK_CALC | // Calculator
waba.sys.Vm.SK_LAUNCH);//Home
}
public void onEvent(Event e){
switch (e.type){
/***********************************************************************
* Hardware Button Logic:
* Palm hard buttons are: Calendar(HARD1),Contacts(HARD2),Todo(HARD3),
* MemoPad(HARD4)
* Palm silk screened buttons are: Home(LAUNCH), Dropdown(MENU),
* Hotsync(SYNC),Find(FIND)
*
* 5-way navigation buttons are IKeys.LEFT,RIGHT,PAGE_UP,PAGE_DOWN and ENTER
*
* WinCE buttons are: HARD1, HARD2, HARD3, HARD4
* Application Tabs are:
* Case #0 = dataCapture
* Case #1 = dataEntry
* Case #2 = grid
* Case #? = gisData
***********************************************************************/
case KeyEvent.KEY_PRESS:
KeyEvent ke = (KeyEvent)e;
//5-way navigation buttons
if (ke.key == IKeys.LEFT && tp.getActiveTab() == 0){
dataCapture.PreviousSpecies();
break;}
else if (ke.key == IKeys.RIGHT && tp.getActiveTab() == 0){
dataCapture.NextSpecies();break;}
else if ((ke.key == IKeys.PAGE_UP || ke.key == IKeys.UP)&& tp.getActiveTab() == 0){
dataCapture.PreviousLocation();break;}
else if ((ke.key == IKeys.PAGE_DOWN ||ke.key == IKeys.DOWN )&& tp.getActiveTab() == 0){
dataCapture.NextLocation();break;}
else if (ke.key == IKeys.ENTER && tp.getActiveTab() == 0){
/**************Problem Here*******************
* The center button on the 5-way control is not actuating.
* It worked in an earlier test version to toggle between
* live/dead observations.
*********************************************/
//new MessageBox("Debug","5-Way center pressed").popupModal();
dataCapture.LiveDeadToggle();
break;}
//These are the standard 4 hardware buttons common to Palm and Windows devices
else if (ke.key == IKeys.HARD1 && tp.getActiveTab() == 0){//counts 1 sighting
dataCapture.szCount = "1";
dataCapture.Count();break;}
else if (ke.key == IKeys.HARD2 && tp.getActiveTab() == 0){//counts 10 sightings
dataCapture.szCount = "10";
dataCapture.Count();break;}
else if (ke.key == IKeys.HARD3 && tp.getActiveTab() == 0){//counts 100 sightings
dataCapture.szCount = "100";
dataCapture.Count();break;}
else if (ke.key == IKeys.HARD4 && tp.getActiveTab() == 0){//counts 1000 sightings
dataCapture.szCount = "1000";
dataCapture.Count();break;}
case ControlEvent.WINDOW_CLOSED:
String sel = null;
if (e.target == speciesEdit){//This is called from gpsDataLogger Main, so window_close event is posted here.
dataCapture.updateSpeciesComboBox();
dataCapture.cbSpecies.repaintNow();break;}
else if (e.target == locationEdit){//This is called from gpsDataLogger Main, so window_close event is posted here.
dataCapture.updateLocationComboBox();
dataCapture.cbLocation.repaintNow();break;}
else if (e.target == mbar){
switch (mbar.getSelectedMenuItem()){
case -1: break; // no item selected
case 001: //File Menu --> Open location edit popup container
locationEdit.popupBlockingModal();break; //Settings menu --> locationEdit lookup table edit
case 002: //File Menu --> Open species edit popup container
speciesEdit.popupBlockingModal();break; //Settings menu --> speciesEdit lookup table edit
case 003: //File Menu --> Purge Main Table
String []szButtonArray = {"Yes","No"};//Settings menu --> purge data table, first WARNING window
mbPurgeMainTable = new MessageBox("Table DELETE WARNING #1","Do you really want to purge | the Main table???", szButtonArray);
mbPurgeMainTable.popupBlockingModal();
int idx = mbPurgeMainTable.getPressedButtonIndex();
if (idx == 0){//Operator chooses 'Yes', goes to second WARNING popup window
String []szButtonArray2 = {"OK","Cancel"};//Settings menu --> purge data table
mbPurgeMainTable = new MessageBox("Table DELETE WARNING #2","This will permanently delete the|ENTIRE set of collected data. ||Make damn sure that this is|what you REALLY want to do.|| Press 'OK' to delete your data,|or 'Cancel' to abort delete.|", szButtonArray2);
mbPurgeMainTable.popupBlockingModal();
int idx2 = mbPurgeMainTable.getPressedButtonIndex();//fetches user choice from second warning, 0 = dump, 1 = cancel.
if (idx2 == 0){//dumps main table, then recreates it
PurgeMainTable();
CreateMainTable();
CreateMainTableIndexes();
invalidateRS();//refresh grid
dataCapture.clear();
switch (tp.getActiveTab()){//below cleans up shown display tab after main table is purged
case 0:break;//dataCapture count fields are cleared by datacapture.clear() above
case 1:dataEdit.clear();break;// dataEdit clears dataEdit tab if that is displayed tab
case 2: break;// grid is displayed tab, refresh will be done by invalidateRS()}
}//show below message for about 3 seconds
mbMainTableDeleted = new MessageBox("Attention","Main data table|has been cleared.",null);
mbMainTableDeleted.popupModal();
waba.sys.Vm.sleep(2000);
mbMainTableDeleted.unpop();
break;}}
else if (idx == 1){}break;//operator has chosen NOT to delete from Delete Warning #1 message box
case 004: //File Menu --> Purge TrackLog Table
String []szClearTrackLogButtonArray = {"Yes","No"};//Settings menu --> purge TrackLog data table, first WARNING window
mbPurgeTrackLog = new MessageBox("Table DELETE WARNING #1","Do you really want to purge | the TrackLog table???", szClearTrackLogButtonArray);
mbPurgeTrackLog.popupBlockingModal();
int idClearTrackLog = mbPurgeTrackLog.getPressedButtonIndex();
if (idClearTrackLog == 0){//Operator chooses 'Yes', goes to second WARNING popup window
String []szClearTrackLogButtonArray2 = {"OK","Cancel"};//Settings menu --> purge data table
mbPurgeTrackLog = new MessageBox("Table DELETE WARNING #2","This will permanently delete the |ENTIRE set of collected TrackLog data.||Make damn sure that this is |what you REALLY want to do.|| Press 'OK' to delete your data,|or 'Cancel' to abort delete.|", szClearTrackLogButtonArray2);
mbPurgeTrackLog.popupBlockingModal();
int idx2 = mbPurgeTrackLog.getPressedButtonIndex();//fetches user choice from second warning, 0 = dump, 1 = cancel.
if (idx2 == 0){//dumps TrackLog table, then recreates it
PurgeTrackLogTable();
CreateTrackLogTable();
mbTrackLogTableDeleted = new MessageBox("Attention","TrackLog data table|has been cleared.",null);
mbTrackLogTableDeleted.popupModal();
waba.sys.Vm.sleep(2000);
mbTrackLogTableDeleted.unpop();
break;}}
else if (idClearTrackLog == 1){}break;//operator has chosen NOT to delete from Delete Warning #1 message box
case 005://File menu --> create *.csv file
String []szCreateCsvFileButtonArray = {"Yes","No"};
mbCreateCsvFile = new MessageBox("Attention","Do you really want to create |a .csv copy of the data tables?||This WILL NOT delete the |tables from the PDA. ", szCreateCsvFileButtonArray);
mbCreateCsvFile.popupBlockingModal();
int idxCsvFile = mbCreateCsvFile.getPressedButtonIndex();
if (idxCsvFile == 0){//creates csv file on device
makeCsvFileSurveyDB();
makeCsvFileTrackLog();
break; }
else{break;} //don't make .csv file, back to application
case 006:// File menu --> Exit selection
String []szExitButtonArray = {"Yes","No"};
mbExitApplication = new MessageBox("Attention","Do you really want to exit|the application?", szExitButtonArray);
mbExitApplication.setUnpopDelay(3000);
mbExitApplication.popupBlockingModal();
int idxExit = mbExitApplication.getPressedButtonIndex();
if (idxExit == 0){//exits application
MainWindow.getMainWindow().exit(0); break; }
else{break;} //don't exit, back to app
case 101: //Settings menu --> reset COM port, restart bluetooth serial connection
InputDialog id = new InputDialog("Reset COM port", " Please enter a different| COM port number, or leave| the current one and press,| 'Restart'. | The default COM port is 8.",Convert.toString(iPortNumber), new String[]{"Restart","Cancel"});
id.popupBlockingModal();
if (id.getPressedButtonIndex()==0){
String szTemp = id.getValue();
iPortNumber = Convert.toInt(szTemp);
//new MessageBox("Attention","iPortNumber is: "+iPortNumber).popupModal();
dataCapture.edTime.requestFocus();
dataCapture.edTime.setText("");
dataCapture.edTime.repaintNow();
dataGps.restartGps(); }break;
case 102: //Settings menu --> Starts trackLog collection, allows user to modify interval
int iTrackLogSeconds = iTrackLogInterval/1000;
String []szTrackLogButtonArray = {"Start","Cancel/Stop"};
InputDialog idTrackLog = new InputDialog("Start TrackLog", " Please enter the desired Track |Log interval in seconds for |Lat/Long coordinates and then |press 'Start'.| The default interval 15 seconds.",Convert.toString(iTrackLogSeconds),szTrackLogButtonArray);
idTrackLog.popupBlockingModal();
int idxTrackLog = idTrackLog.getPressedButtonIndex();
if (idxTrackLog == 0){//starts trackLog()
String szTemp = idTrackLog.getValue();
iTrackLogSeconds = Convert.toInt(szTemp);
iTrackLogInterval = iTrackLogSeconds*1000;//converts seconds to milliseconds
dataEdit.CreateTrackLogTimer();
iTrackLogFlag = 1;//trips On indicator on dataCapture tab
dataCapture.LoadTrackLogIndicator();
break; }
else{ //don't start TrackLog, cancel if running, back to app
dataEdit.removeTimer(dataEdit.trackLogTimer);
iTrackLogFlag = 0;
dataCapture.LoadTrackLogIndicator();
break;}
//Info menu -->gpsDataLogger, SuperWaba, OS/Device, General Instructions, changelog
case 201: //about gpsDataLogger, changelog popup
String []szAboutGpsDataLogger = {"Close","Show Change Log"};
mbAboutGpsDataLogger = new MessageBox("About gpsDataLogger 0.12","|The purpose of this application|is to allow for recording of|field data with only minimal visual|contact with the PDA device |during data collection. | ", szAboutGpsDataLogger);
mbAboutGpsDataLogger.setUnpopDelay(5000);
mbAboutGpsDataLogger.popupBlockingModal();
int idxAboutGpsDataLogger = mbAboutGpsDataLogger.getPressedButtonIndex();
if (idxAboutGpsDataLogger == 0){//0 = closes popup and return to app
break; }
else if (idxAboutGpsDataLogger == 1){//1 = pops up change log, text is left aligned.
mbChangeLog = new MessageBox("Change Log",szChangeLog);
mbChangeLog.setTextAlignment(2);
mbChangeLog.popupBlockingModal();
break;}
case 202: new MessageBox("About SuperWaba","SuperWaba Virtual Machine 5.8 | Copyright (c)2000-2007 | Guilherme Campos Hazan,| SuperWaba Ltda,| Rio de Janeiro, Brazil| Phone: +55 21 2239-6695 | www.superwaba.com|| SuperWaba is an enhanced version | of the Waba Virtual Machine | Copyright (c) 1998,1999 WabaSoft | www.wabasoft.com").popupModal(); break;
case 203: new MessageBox("OS/screensize",szPlatform + " | " +szHeight + "H "+ "x" + szWidth +"W").popupModal(); break;
case 204: new MessageBox("General Instructions","To modify fields in the location| or species listboxs on dataCapture|tab, tap the menubar, |select 'Edit Lookup Table'. This |window allows users to browse, add, |update or even delete the lookup |table. Users can edit data in the |main table on the Data Edit tab. |The main table can be deleted |by selecting the menubar followed | by 'Purge Main Table'. | Have fun, and be careful!.").popupModal(); break;
}break;
}
case ControlEvent.PRESSED:
if (e.target == grid){//target is grid
GridEvent ge = (GridEvent)e;
if (false) Vm.debug(ge.col+","+ge.row);
}
else if (e.target == tp)//target is one of the three tab panels, (GPS panel no event...)
switch (tp.getActiveTab()){
case 0: // dataCapture tab
dataCapture.updateSpeciesComboBox();
dataCapture.cbSpecies.repaintNow();
dataCapture.updateLocationComboBox();
dataCapture.cbLocation.repaintNow();
break;
case 1: // dataEdit tab
String []item = grid.getSelectedItem();
if (item == null)
dataEdit.clear();
else
dataEdit.show(item[0]);
break;
case 2: // grid tab
invalidateRS(); // update the grid
}break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -