From eaf302dde56a56fdedb28d2f0bc3f46e1454c4d3 Mon Sep 17 00:00:00 2001 From: g_miss_n Date: Mon, 14 Jul 2025 01:02:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Activities/HistoryActivity.java | 322 +++++----- .../Activities/MainActivity.java | 58 +- .../Activities/PresetManagerActivity.java | 260 ++++---- .../Activities/SettingsActivity.java | 196 +++--- .../Database/DatabaseHelper.java | 596 +++++++++--------- .../Bluetooh_736_2/Models/DataStatistics.java | 102 +-- .../Bluetooh_736_2/Models/SensorData.java | 52 +- battlefield_system_package_diagram.md | 43 ++ 8 files changed, 835 insertions(+), 794 deletions(-) create mode 100644 battlefield_system_package_diagram.md diff --git a/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Activities/HistoryActivity.java b/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Activities/HistoryActivity.java index 226f830..693c07c 100644 --- a/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Activities/HistoryActivity.java +++ b/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Activities/HistoryActivity.java @@ -72,57 +72,57 @@ public class HistoryActivity extends Activity { showStatistics(); } - private void initViews() { - listViewHistory = findViewById(R.id.listViewHistory); - textViewStats = findViewById(R.id.textViewStats); - buttonShowAll = findViewById(R.id.buttonShowAll); - buttonShowRecent = findViewById(R.id.buttonShowRecent); - buttonClearData = findViewById(R.id.buttonClearData); - buttonRefresh = findViewById(R.id.buttonRefresh); + private void initViews() { // 初始化视图组件 + listViewHistory = findViewById(R.id.listViewHistory); // 获取ListView + textViewStats = findViewById(R.id.textViewStats); // 获取TextView + buttonShowAll = findViewById(R.id.buttonShowAll); // 获取Button + buttonShowRecent = findViewById(R.id.buttonShowRecent); // 获取Button + buttonClearData = findViewById(R.id.buttonClearData); // 获取Button + buttonRefresh = findViewById(R.id.buttonRefresh); // 获取Button // 初始化筛选和查询组件 - spinnerFilter = findViewById(R.id.spinnerFilter); - buttonFilter = findViewById(R.id.buttonFilter); - editStartDate = findViewById(R.id.editStartDate); - editEndDate = findViewById(R.id.editEndDate); - buttonStartDate = findViewById(R.id.buttonStartDate); - buttonEndDate = findViewById(R.id.buttonEndDate); - buttonQuery = findViewById(R.id.buttonQuery); + spinnerFilter = findViewById(R.id.spinnerFilter); // 获取Spinner + buttonFilter = findViewById(R.id.buttonFilter); // 获取Button + editStartDate = findViewById(R.id.editStartDate); // 获取EditText + editEndDate = findViewById(R.id.editEndDate); // 获取EditText + buttonStartDate = findViewById(R.id.buttonStartDate); // 获取Button + buttonEndDate = findViewById(R.id.buttonEndDate); // 获取Button + buttonQuery = findViewById(R.id.buttonQuery); // 获取Button // 初始化ListView - displayList = new ArrayList<>(); - adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, displayList); - listViewHistory.setAdapter(adapter); + displayList = new ArrayList<>(); // 创建ArrayList + adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, displayList); // 创建ArrayAdapter + listViewHistory.setAdapter(adapter); // 设置ListView的Adapter // 设置筛选下拉框 - setupFilterSpinner(); + setupFilterSpinner(); // 设置筛选下拉框 // 设置按钮点击事件 buttonShowAll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - loadAllData(); + loadAllData(); // 加载所有数据 } }); buttonShowRecent.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - loadRecentData(); + loadRecentData(); // 加载最近数据 } }); buttonClearData.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - clearAllData(); + clearAllData(); // 清空所有数据 } }); buttonRefresh.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - refreshData(); + refreshData(); // 刷新数据 } }); @@ -130,7 +130,7 @@ public class HistoryActivity extends Activity { buttonFilter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - performFilter(); + performFilter(); // 执行筛选 } }); @@ -138,14 +138,14 @@ public class HistoryActivity extends Activity { buttonStartDate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - showDateTimePicker(editStartDate, true); + showDateTimePicker(editStartDate, true); // 显示日期时间选择器 } }); buttonEndDate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - showDateTimePicker(editEndDate, false); + showDateTimePicker(editEndDate, false); // 显示日期时间选择器 } }); @@ -153,7 +153,7 @@ public class HistoryActivity extends Activity { buttonQuery.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - performTimeRangeQuery(); + performTimeRangeQuery(); // 执行时间区段查询 } }); } @@ -163,11 +163,11 @@ public class HistoryActivity extends Activity { */ private void loadAllData() { try { - List dataList = databaseHelper.getAllSensorData(); - updateDisplayList(dataList); - Toast.makeText(this, "已加载所有数据,共 " + dataList.size() + " 条记录", Toast.LENGTH_SHORT).show(); + List dataList = databaseHelper.getAllSensorData(); // 获取所有数据 + updateDisplayList(dataList); // 更新显示列表 + Toast.makeText(this, "已加载所有数据,共 " + dataList.size() + " 条记录", Toast.LENGTH_SHORT).show(); // 显示Toast } catch (Exception e) { - Toast.makeText(this, "加载数据失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "加载数据失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示Toast } } @@ -176,11 +176,11 @@ public class HistoryActivity extends Activity { */ private void loadRecentData() { try { - List dataList = databaseHelper.getRecentData(50); // 显示最近50条记录 - updateDisplayList(dataList); - Toast.makeText(this, "已加载最近 " + dataList.size() + " 条记录", Toast.LENGTH_SHORT).show(); + List dataList = databaseHelper.getRecentData(50); // 获取最近50条记录 + updateDisplayList(dataList); // 更新显示列表 + Toast.makeText(this, "已加载最近 " + dataList.size() + " 条记录", Toast.LENGTH_SHORT).show(); // 显示Toast } catch (Exception e) { - Toast.makeText(this, "加载数据失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "加载数据失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示Toast } } @@ -188,36 +188,36 @@ public class HistoryActivity extends Activity { * 更新显示列表 */ private void updateDisplayList(List dataList) { - displayList.clear(); + displayList.clear(); // 清空显示列表 - if (dataList.isEmpty()) { - displayList.add("暂无数据"); + if (dataList.isEmpty()) { // 如果数据列表为空 + displayList.add("暂无数据"); // 添加暂无数据 } else { for (SensorData data : dataList) { - String displayText = formatDataForDisplay(data); - displayList.add(displayText); + String displayText = formatDataForDisplay(data); // 格式化数据为显示文本 + displayList.add(displayText); // 添加显示文本 } } - adapter.notifyDataSetChanged(); + adapter.notifyDataSetChanged(); // 通知Adapter数据已改变 } /** * 格式化数据为显示文本 */ private String formatDataForDisplay(SensorData data) { - String triggerInfo = data.isTriggered() ? " [⚠️触发: " + data.getTriggerConditions() + "]" : " [✅正常]"; + String triggerInfo = data.isTriggered() ? " [⚠️触发: " + data.getTriggerConditions() + "]" : " [✅正常]"; // 获取触发信息 return String.format(Locale.getDefault(), - "%s%s\n温度:%d℃ 湿度:%d%% 光照:%d%% 距离:%dcm 时间:%dmin 模式:%s", - data.getTimestamp(), - triggerInfo, - data.getTemperature(), - data.getHumidity(), - data.getLight(), - data.getDistance(), - data.getTimeMinutes(), - data.getMode().equals("auto") ? "自动" : "手动" + "%s%s\n温度:%d℃ 湿度:%d%% 光照:%d%% 距离:%dcm 时间:%dmin 模式:%s", // 格式化数据为显示文本 + data.getTimestamp(), // 获取时间戳 + triggerInfo, // 添加触发信息 + data.getTemperature(), // 获取温度 + data.getHumidity(), // 获取湿度 + data.getLight(), // 获取光照 + data.getDistance(), // 获取距离 + data.getTimeMinutes(), // 获取时间(分钟) + data.getMode().equals("auto") ? "自动" : "手动" // 获取模式 ); } @@ -226,39 +226,39 @@ public class HistoryActivity extends Activity { */ private void showStatistics() { try { - DataStatistics stats = databaseHelper.getDataStatistics(); + DataStatistics stats = databaseHelper.getDataStatistics(); // 获取统计数据 - if (stats.getTotalRecords() == 0) { - textViewStats.setText("暂无统计数据"); + if (stats.getTotalRecords() == 0) { // 如果总记录数为0 + textViewStats.setText("暂无统计数据"); // 显示暂无统计数据 return; } - String statsText = String.format(Locale.getDefault(), - "📊 数据统计信息\n\n" + - "📝 总记录数: %d 条\n\n" + - "🌡️ 温度统计:\n" + - " 最低: %d℃\n" + - " 最高: %d℃\n" + - " 平均: %.1f℃\n\n" + - "💧 湿度统计:\n" + - " 最低: %d%%\n" + - " 最高: %d%%\n" + - " 平均: %.1f%%\n\n" + - "💡 光照统计:\n" + - " 最低: %d%%\n" + - " 最高: %d%%\n" + - " 平均: %.1f%%", + String statsText = String.format(Locale.getDefault(), // 格式化数据为显示文本 + "📊 数据统计信息\n\n" + // 显示统计信息 + "📝 总记录数: %d 条\n\n" + // 显示总记录数 + "🌡️ 温度统计:\n" + // 显示温度统计 + " 最低: %d℃\n" + // 显示最低温度 + " 最高: %d℃\n" + // 显示最高温度 + " 平均: %.1f℃\n\n" + // 显示平均温度 + "💧 湿度统计:\n" + // 显示湿度统计 + " 最低: %d%%\n" + // 显示最低湿度 + " 最高: %d%%\n" + // 显示最高湿度 + " 平均: %.1f%%\n\n" + // 显示平均湿度 + "💡 光照统计:\n" + // 显示光照统计 + " 最低: %d%%\n" + // 显示最低光照 + " 最高: %d%%\n" + // 显示最高光照 + " 平均: %.1f%%", // 显示平均光照 - stats.getTotalRecords(), - stats.getMinTemperature(), stats.getMaxTemperature(), stats.getAvgTemperature(), - stats.getMinHumidity(), stats.getMaxHumidity(), stats.getAvgHumidity(), - stats.getMinLight(), stats.getMaxLight(), stats.getAvgLight() + stats.getTotalRecords(), // 获取总记录数 + stats.getMinTemperature(), stats.getMaxTemperature(), stats.getAvgTemperature(), // 获取温度统计 + stats.getMinHumidity(), stats.getMaxHumidity(), stats.getAvgHumidity(), // 获取湿度统计 + stats.getMinLight(), stats.getMaxLight(), stats.getAvgLight() // 获取光照统计 ); - textViewStats.setText(statsText); + textViewStats.setText(statsText); // 设置统计信息 } catch (Exception e) { - textViewStats.setText("统计信息加载失败: " + e.getMessage()); + textViewStats.setText("统计信息加载失败: " + e.getMessage()); // 显示统计信息加载失败 } } @@ -267,14 +267,14 @@ public class HistoryActivity extends Activity { */ private void clearAllData() { try { - databaseHelper.clearAllData(); - displayList.clear(); - displayList.add("所有数据已清空"); - adapter.notifyDataSetChanged(); + databaseHelper.clearAllData(); // 清空所有数据 + displayList.clear(); // 清空显示列表 + displayList.add("所有数据已清空"); // 添加所有数据已清空 + adapter.notifyDataSetChanged(); // 通知Adapter数据已改变 showStatistics(); // 更新统计信息 - Toast.makeText(this, "所有数据已清空", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "所有数据已清空", Toast.LENGTH_SHORT).show(); // 显示Toast } catch (Exception e) { - Toast.makeText(this, "清空数据失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "清空数据失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示Toast } } @@ -282,19 +282,19 @@ public class HistoryActivity extends Activity { * 刷新数据 */ private void refreshData() { - loadRecentData(); - showStatistics(); - Toast.makeText(this, "数据已刷新", Toast.LENGTH_SHORT).show(); + loadRecentData(); // 加载最近数据 + showStatistics(); // 显示统计信息 + Toast.makeText(this, "数据已刷新", Toast.LENGTH_SHORT).show(); // 显示Toast } /** * 设置筛选下拉框 */ private void setupFilterSpinner() { - String[] filterOptions = {"全部数据", "已触发", "未触发"}; - ArrayAdapter filterAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, filterOptions); - filterAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - spinnerFilter.setAdapter(filterAdapter); + String[] filterOptions = {"全部数据", "已触发", "未触发"}; // 设置筛选选项 + ArrayAdapter filterAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, filterOptions); // 创建ArrayAdapter + filterAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // 设置下拉框样式 + spinnerFilter.setAdapter(filterAdapter); // 设置Spinner的Adapter } /** @@ -302,36 +302,36 @@ public class HistoryActivity extends Activity { */ private void performFilter() { try { - int selectedPosition = spinnerFilter.getSelectedItemPosition(); - List dataList; + int selectedPosition = spinnerFilter.getSelectedItemPosition(); // 获取选中的位置 + List dataList; // 创建数据列表 switch (selectedPosition) { case 0: // 全部数据 - dataList = databaseHelper.getAllSensorData(); + dataList = databaseHelper.getAllSensorData(); // 获取所有数据 break; case 1: // 已触发 - dataList = databaseHelper.getDataByTriggerStatus(true); + dataList = databaseHelper.getDataByTriggerStatus(true); // 获取已触发数据 break; case 2: // 未触发 - dataList = databaseHelper.getDataByTriggerStatus(false); + dataList = databaseHelper.getDataByTriggerStatus(false); // 获取未触发数据 break; default: - dataList = databaseHelper.getAllSensorData(); + dataList = databaseHelper.getAllSensorData(); // 获取所有数据 break; } - updateDisplayList(dataList); - String filterName = (String) spinnerFilter.getSelectedItem(); - Toast.makeText(this, "已筛选 " + filterName + ",共 " + dataList.size() + " 条记录", Toast.LENGTH_SHORT).show(); + updateDisplayList(dataList); // 更新显示列表 + String filterName = (String) spinnerFilter.getSelectedItem(); // 获取选中的筛选名称 + Toast.makeText(this, "已筛选 " + filterName + ",共 " + dataList.size() + " 条记录", Toast.LENGTH_SHORT).show(); // 显示Toast } catch (Exception e) { - Toast.makeText(this, "筛选失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "筛选失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示Toast } } /** * 显示日期时间选择器 */ - private void showDateTimePicker(final EditText editText, boolean isStartDate) { + private void showDateTimePicker(final EditText editText, boolean isStartDate) { // 显示日期时间选择器 // 先显示日期选择器 DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { @Override @@ -343,20 +343,20 @@ public class HistoryActivity extends Activity { // 格式化并设置到EditText String dateTime = String.format(Locale.getDefault(), "%04d-%02d-%02d %02d:%02d:00", year, month + 1, dayOfMonth, hourOfDay, minute); - editText.setText(dateTime); + editText.setText(dateTime); // 设置到EditText } - }, 0, 0, true); - timePickerDialog.show(); + }, 0, 0, true); // 创建TimePickerDialog + timePickerDialog.show(); // 显示TimePickerDialog } - }, 2024, 0, 1); + }, 2024, 0, 1); // 创建DatePickerDialog // 如果是结束时间,默认设置为当前时间 if (!isStartDate) { Date now = new Date(); - datePickerDialog.updateDate(now.getYear() + 1900, now.getMonth(), now.getDate()); + datePickerDialog.updateDate(now.getYear() + 1900, now.getMonth(), now.getDate()); // 更新日期 } - datePickerDialog.show(); + datePickerDialog.show(); // 显示DatePickerDialog } /** @@ -364,23 +364,23 @@ public class HistoryActivity extends Activity { */ private void performTimeRangeQuery() { try { - String startDateStr = editStartDate.getText().toString().trim(); - String endDateStr = editEndDate.getText().toString().trim(); + String startDateStr = editStartDate.getText().toString().trim(); // 获取开始时间 + String endDateStr = editEndDate.getText().toString().trim(); // 获取结束时间 if (TextUtils.isEmpty(startDateStr) || TextUtils.isEmpty(endDateStr)) { - Toast.makeText(this, "请选择开始时间和结束时间", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "请选择开始时间和结束时间", Toast.LENGTH_SHORT).show(); // 显示Toast return; } // 验证时间格式(简单验证) if (startDateStr.length() < 19 || endDateStr.length() < 19) { - Toast.makeText(this, "时间格式不正确,请使用:yyyy-MM-dd HH:mm:ss", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "时间格式不正确,请使用:yyyy-MM-dd HH:mm:ss", Toast.LENGTH_SHORT).show(); // 显示Toast return; } // 获取筛选条件 - int filterPosition = spinnerFilter.getSelectedItemPosition(); - Boolean triggerFilter = null; + int filterPosition = spinnerFilter.getSelectedItemPosition(); // 获取选中的位置 + Boolean triggerFilter = null; // 创建触发过滤器 if (filterPosition == 1) { triggerFilter = true; // 已触发 } else if (filterPosition == 2) { @@ -388,14 +388,14 @@ public class HistoryActivity extends Activity { } // 执行查询 - List dataList = databaseHelper.getDataByDateRangeAndTriggerStatus(startDateStr, endDateStr, triggerFilter); - updateDisplayList(dataList); + List dataList = databaseHelper.getDataByDateRangeAndTriggerStatus(startDateStr, endDateStr, triggerFilter); // 执行查询 + updateDisplayList(dataList); // 更新显示列表 - String filterName = (String) spinnerFilter.getSelectedItem(); - Toast.makeText(this, "查询完成:" + filterName + " " + dataList.size() + " 条记录", Toast.LENGTH_SHORT).show(); + String filterName = (String) spinnerFilter.getSelectedItem(); // 获取选中的筛选名称 + Toast.makeText(this, "查询完成:" + filterName + " " + dataList.size() + " 条记录", Toast.LENGTH_SHORT).show(); // 显示Toast } catch (Exception e) { - Toast.makeText(this, "查询失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "查询失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示Toast } } @@ -403,7 +403,7 @@ public class HistoryActivity extends Activity { * 返回按钮点击事件 */ public void onBackButtonClicked(View view) { - finish(); + finish(); // 结束当前Activity } /** @@ -411,26 +411,26 @@ public class HistoryActivity extends Activity { */ public void onExportButtonClicked(View view) { try { - List allData = databaseHelper.getAllSensorData(); + List allData = databaseHelper.getAllSensorData(); // 获取所有数据 - if (allData.isEmpty()) { - Toast.makeText(this, "暂无数据可导出", Toast.LENGTH_SHORT).show(); + if (allData.isEmpty()) { // 如果数据列表为空 + Toast.makeText(this, "暂无数据可导出", Toast.LENGTH_SHORT).show(); // 显示Toast return; } // 创建导出文件 - File csvFile = createExportFile(allData); + File csvFile = createExportFile(allData); // 创建导出文件 - if (csvFile != null && csvFile.exists()) { + if (csvFile != null && csvFile.exists()) { // 如果文件存在 // 文件创建成功,尝试打开 - openCsvFile(csvFile); - Toast.makeText(this, "数据导出成功!共 " + allData.size() + " 条记录\n文件位置: " + csvFile.getAbsolutePath(), Toast.LENGTH_LONG).show(); + openCsvFile(csvFile); // 打开CSV文件 + Toast.makeText(this, "数据导出成功!共 " + allData.size() + " 条记录\n文件位置: " + csvFile.getAbsolutePath(), Toast.LENGTH_LONG).show(); // 显示Toast } else { - Toast.makeText(this, "文件创建失败,请检查存储权限", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "文件创建失败,请检查存储权限", Toast.LENGTH_SHORT).show(); // 显示Toast } } catch (Exception e) { - Toast.makeText(this, "导出数据失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "导出数据失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示Toast } } @@ -440,29 +440,29 @@ public class HistoryActivity extends Activity { private File createExportFile(List dataList) { try { // 创建文件名(带时间戳) - String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date()); - String fileName = "战场探测数据_" + timestamp + ".csv"; + String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date()); // 获取当前时间戳 + String fileName = "战场探测数据_" + timestamp + ".csv"; // 创建文件名 // 获取下载目录 - File downloadsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); - if (!downloadsDir.exists()) { - downloadsDir.mkdirs(); + File downloadsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); // 获取下载目录 + if (!downloadsDir.exists()) { // 如果下载目录不存在 + downloadsDir.mkdirs(); // 创建下载目录 } - File csvFile = new File(downloadsDir, fileName); + File csvFile = new File(downloadsDir, fileName); // 创建CSV文件 // 写入CSV数据 - FileWriter writer = new FileWriter(csvFile, false); + FileWriter writer = new FileWriter(csvFile, false); // 创建FileWriter // 写入BOM,确保Excel正确显示中文 - writer.write('\ufeff'); + writer.write('\ufeff'); // 写入BOM // 写入标题头 - writer.write("数据记录时间,触发状态,触发条件,温度(℃),湿度(%),光照(%),距离(cm),运行时间(min),工作模式\n"); + writer.write("数据记录时间,触发状态,触发条件,温度(℃),湿度(%),光照(%),距离(cm),运行时间(min),工作模式\n"); // 写入标题头 // 写入数据行 for (SensorData data : dataList) { - writer.write(String.format(Locale.getDefault(), + writer.write(String.format(Locale.getDefault(), // 写入数据行 "%s,%s,\"%s\",%d,%d,%d,%d,%d,%s\n", data.getTimestamp(), data.isTriggered() ? "已触发" : "正常", @@ -476,12 +476,12 @@ public class HistoryActivity extends Activity { )); } - writer.close(); - return csvFile; + writer.close(); // 关闭FileWriter + return csvFile; // 返回CSV文件 } catch (IOException e) { - e.printStackTrace(); - return null; + e.printStackTrace(); // 打印异常 + return null; // 返回null } } @@ -490,34 +490,34 @@ public class HistoryActivity extends Activity { */ private void openCsvFile(File csvFile) { try { - Uri fileUri = Uri.fromFile(csvFile); + Uri fileUri = Uri.fromFile(csvFile); // 获取文件URI // 尝试用Excel打开 Intent excelIntent = new Intent(Intent.ACTION_VIEW); - excelIntent.setDataAndType(fileUri, "application/vnd.ms-excel"); - excelIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + excelIntent.setDataAndType(fileUri, "application/vnd.ms-excel"); // 设置数据类型 + excelIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 设置标志 if (excelIntent.resolveActivity(getPackageManager()) != null) { - startActivity(excelIntent); - return; + startActivity(excelIntent); // 启动Activity + return; // 返回 } // 如果没有Excel,尝试用文本编辑器打开 Intent textIntent = new Intent(Intent.ACTION_VIEW); - textIntent.setDataAndType(fileUri, "text/plain"); - textIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + textIntent.setDataAndType(fileUri, "text/plain"); // 设置数据类型 + textIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 设置标志 if (textIntent.resolveActivity(getPackageManager()) != null) { - startActivity(textIntent); - return; + startActivity(textIntent); // 启动Activity + return; // 返回 } // 如果都没有,提供分享选项 - shareFile(csvFile); + shareFile(csvFile); // 分享文件 } catch (Exception e) { // 如果打开失败,尝试分享文件 - shareFile(csvFile); + shareFile(csvFile); // 分享文件 } } @@ -526,17 +526,17 @@ public class HistoryActivity extends Activity { */ private void shareFile(File csvFile) { try { - Uri fileUri = Uri.fromFile(csvFile); + Uri fileUri = Uri.fromFile(csvFile); // 获取文件URI - Intent shareIntent = new Intent(Intent.ACTION_SEND); - shareIntent.setType("text/csv"); - shareIntent.putExtra(Intent.EXTRA_STREAM, fileUri); - shareIntent.putExtra(Intent.EXTRA_SUBJECT, "战场探测系统数据导出"); - shareIntent.putExtra(Intent.EXTRA_TEXT, "战场环境探测系统的传感器数据记录文件"); - shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + Intent shareIntent = new Intent(Intent.ACTION_SEND); // 创建Intent + shareIntent.setType("text/csv"); // 设置数据类型 + shareIntent.putExtra(Intent.EXTRA_STREAM, fileUri); // 设置数据 + shareIntent.putExtra(Intent.EXTRA_SUBJECT, "战场探测系统数据导出"); // 设置主题 + shareIntent.putExtra(Intent.EXTRA_TEXT, "战场环境探测系统的传感器数据记录文件"); // 设置文本 + shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 设置标志 - Intent chooser = Intent.createChooser(shareIntent, "选择应用打开CSV文件"); - startActivity(chooser); + Intent chooser = Intent.createChooser(shareIntent, "选择应用打开CSV文件"); // 创建Intent + startActivity(chooser); // 启动Activity } catch (Exception e) { Toast.makeText(this, "无法打开文件,但已保存到下载文件夹: " + csvFile.getName(), Toast.LENGTH_LONG).show(); @@ -547,7 +547,7 @@ public class HistoryActivity extends Activity { * 获取当前时间戳 */ private String getCurrentTimestamp() { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); - return sdf.format(new Date()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); // 创建SimpleDateFormat + return sdf.format(new Date()); // 返回当前时间戳 } } \ No newline at end of file diff --git a/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Activities/MainActivity.java b/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Activities/MainActivity.java index f2c7dbd..9572ecd 100644 --- a/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Activities/MainActivity.java +++ b/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Activities/MainActivity.java @@ -65,13 +65,13 @@ public class MainActivity extends Activity { private BluetoothAdapter _bluetooth = BluetoothAdapter.getDefaultAdapter(); //获取本地蓝牙适配器,即蓝牙设备 // 数据库相关变量 - private DatabaseHelper databaseHelper; - private int currentTemperature = 0; - private int currentHumidity = 0; - private int currentLight = 0; - private int currentDistance = 0; - private int currentTimeMinutes = 0; - private String currentMode = "auto"; + private DatabaseHelper databaseHelper; // 数据库助手 + private int currentTemperature = 0; // 当前温度 + private int currentHumidity = 0; // 当前湿度 + private int currentLight = 0; // 当前光照强度 + private int currentDistance = 0; // 当前距离 + private int currentTimeMinutes = 0; // 当前时间(分钟) + private String currentMode = "auto"; // 当前模式 // 数据记录设置 private boolean autoRecordEnabled = true; // 自动记录开关 @@ -602,47 +602,45 @@ public class MainActivity extends Activity { */ private void saveDataToDatabase() { try { - // 检查是否启用自动记录 - if (!autoRecordEnabled) { + if (!autoRecordEnabled) { // 检查是否启用自动记录 return; } - - // 检查记录间隔 - long currentTime = System.currentTimeMillis(); - if (currentTime - lastRecordTime < recordingInterval) { + // 检查是否达到记录间隔 + long currentTime = System.currentTimeMillis(); // 获取当前时间 + if (currentTime - lastRecordTime < recordingInterval) { // 检查是否达到记录间隔 return; } - lastRecordTime = currentTime; + lastRecordTime = currentTime; // 更新上次记录时间 // 检测是否触发报警条件 boolean isTriggered = false; - StringBuilder triggerConditions = new StringBuilder(); + StringBuilder triggerConditions = new StringBuilder(); // 触发条件字符串 - if (currentTemperature > thresholdTemp) { - isTriggered = true; - triggerConditions.append("温度超标(").append(currentTemperature).append("℃>").append(thresholdTemp).append("℃); "); + if (currentTemperature > thresholdTemp) { // 检查温度是否超标 + isTriggered = true; // 设置触发标志 + triggerConditions.append("温度超标(").append(currentTemperature).append("℃>").append(thresholdTemp).append("℃); "); // 添加触发条件 } - if (currentHumidity > thresholdHumi) { + if (currentHumidity > thresholdHumi) { // 检查湿度是否超标 isTriggered = true; - triggerConditions.append("湿度超标(").append(currentHumidity).append("%>").append(thresholdHumi).append("%); "); + triggerConditions.append("湿度超标(").append(currentHumidity).append("%>").append(thresholdHumi).append("%); "); // 添加触发条件 } - if (currentDistance < thresholdDistance && currentDistance > 0) { - isTriggered = true; - triggerConditions.append("距离过近(").append(currentDistance).append("cm<").append(thresholdDistance).append("cm); "); + if (currentDistance < thresholdDistance && currentDistance > 0) { // 检查距离是否过近 + isTriggered = true; // 设置触发标志 + triggerConditions.append("距离过近(").append(currentDistance).append("cm<").append(thresholdDistance).append("cm); "); // 添加触发条件 } - if (currentLight > thresholdLight) { - isTriggered = true; - triggerConditions.append("光照过强(").append(currentLight).append("%>").append(thresholdLight).append("%); "); + if (currentLight > thresholdLight) { // 检查光照是否过强 + isTriggered = true; // 设置触发标志 + triggerConditions.append("光照过强(").append(currentLight).append("%>").append(thresholdLight).append("%); "); // 添加触发条件 } // 处理触发条件字符串 String triggerText = triggerConditions.length() > 0 ? - triggerConditions.toString().trim() : "正常"; + triggerConditions.toString().trim() : "正常"; // 处理触发条件字符串 - long id = databaseHelper.addSensorData( + long id = databaseHelper.addSensorData( // 保存数据到数据库 currentTemperature, currentHumidity, currentLight, @@ -658,7 +656,7 @@ public class MainActivity extends Activity { // 可选:自动清理旧数据,保留最近30天的数据 if (databaseHelper.getRecordCount() > 1000) { - int deletedRows = databaseHelper.deleteOldData(30); + int deletedRows = databaseHelper.deleteOldData(30); // 删除旧数据 if (deletedRows > 0) { Log.d("MainActivity", "已删除 " + deletedRows + " 条旧数据"); } @@ -672,7 +670,7 @@ public class MainActivity extends Activity { * 历史记录按钮点击事件 */ public void onHistoryButtonClicked(View view) { - Intent intent = new Intent(this, HistoryActivity.class); + Intent intent = new Intent(this, HistoryActivity.class); // 跳转历史记录页面 startActivity(intent); } diff --git a/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Activities/PresetManagerActivity.java b/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Activities/PresetManagerActivity.java index dc7112d..eb9a50d 100644 --- a/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Activities/PresetManagerActivity.java +++ b/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Activities/PresetManagerActivity.java @@ -24,7 +24,7 @@ import java.util.List; import com.test.Bluetooh_736_2.Database.DatabaseHelper; import com.test.Bluetooh_736_2.Models.PresetScheme; -public class PresetManagerActivity extends Activity { +public class PresetManagerActivity extends Activity { // 预设方案管理Activity private ListView listPresets; private Button btnAddPreset; @@ -37,47 +37,47 @@ public class PresetManagerActivity extends Activity { private PresetScheme selectedScheme; @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_preset_manager); + protected void onCreate(Bundle savedInstanceState) { // 创建Activity + super.onCreate(savedInstanceState); // 创建Activity + setContentView(R.layout.activity_preset_manager); // 设置布局 // 初始化数据库 - dbHelper = new DatabaseHelper(this); + dbHelper = new DatabaseHelper(this); // 初始化数据库 // 初始化UI组件 - initViews(); + initViews(); // 初始化UI组件 // 加载预设方案数据 - loadPresetSchemes(); + loadPresetSchemes(); // 加载预设方案数据 // 设置事件监听器 - setupListeners(); + setupListeners(); // 设置事件监听器 } - private void initViews() { - listPresets = findViewById(R.id.listPresets); - btnAddPreset = findViewById(R.id.btnAddPreset); - btnCancel = findViewById(R.id.btnCancel); - btnConfirm = findViewById(R.id.btnConfirm); + private void initViews() { // 初始化UI组件 + listPresets = findViewById(R.id.listPresets); // 预设方案列表 + btnAddPreset = findViewById(R.id.btnAddPreset); // 添加预设方案按钮 + btnCancel = findViewById(R.id.btnCancel); // 取消按钮 + btnConfirm = findViewById(R.id.btnConfirm); // 确定按钮 // 初始化适配器 - presetSchemes = new ArrayList<>(); - adapter = new PresetSchemeAdapter(); - listPresets.setAdapter(adapter); + presetSchemes = new ArrayList<>(); // 预设方案列表 + adapter = new PresetSchemeAdapter(); // 预设方案适配器 + listPresets.setAdapter(adapter); // 设置适配器 } - private void loadPresetSchemes() { - presetSchemes.clear(); - presetSchemes.addAll(dbHelper.getAllPresetSchemes()); - adapter.notifyDataSetChanged(); + private void loadPresetSchemes() { // 加载预设方案数据 + presetSchemes.clear(); // 清空预设方案列表 + presetSchemes.addAll(dbHelper.getAllPresetSchemes()); // 添加预设方案 + adapter.notifyDataSetChanged(); // 通知适配器数据已改变 } - private void setupListeners() { + private void setupListeners() { // 设置事件监听器 // 添加预设方案按钮 btnAddPreset.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - showPresetEditor(null); + showPresetEditor(null); // 显示预设方案编辑器 } }); @@ -85,7 +85,7 @@ public class PresetManagerActivity extends Activity { btnCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - finish(); + finish(); // 结束当前Activity } }); @@ -94,11 +94,11 @@ public class PresetManagerActivity extends Activity { @Override public void onClick(View v) { if (selectedScheme != null) { - applyPresetScheme(selectedScheme); - setResult(RESULT_OK); - finish(); + applyPresetScheme(selectedScheme); // 应用预设方案 + setResult(RESULT_OK); // 设置返回结果 + finish(); // 结束当前Activity } else { - Toast.makeText(PresetManagerActivity.this, "请选择一个预设方案", Toast.LENGTH_SHORT).show(); + Toast.makeText(PresetManagerActivity.this, "请选择一个预设方案", Toast.LENGTH_SHORT).show(); // 显示Toast } } }); @@ -107,78 +107,78 @@ public class PresetManagerActivity extends Activity { /** * 显示预设方案编辑器 */ - private void showPresetEditor(final PresetScheme scheme) { - LayoutInflater inflater = getLayoutInflater(); - View dialogView = inflater.inflate(R.layout.dialog_preset_editor, null); + private void showPresetEditor(final PresetScheme scheme) { // 显示预设方案编辑器 + LayoutInflater inflater = getLayoutInflater(); // 获取LayoutInflater + View dialogView = inflater.inflate(R.layout.dialog_preset_editor, null); // 获取对话框视图 // 获取对话框控件 - TextView textDialogTitle = dialogView.findViewById(R.id.textDialogTitle); - EditText editPresetName = dialogView.findViewById(R.id.editPresetName); - EditText editPresetDescription = dialogView.findViewById(R.id.editPresetDescription); - EditText editTempThreshold = dialogView.findViewById(R.id.editTempThreshold); - EditText editHumiThreshold = dialogView.findViewById(R.id.editHumiThreshold); - EditText editDistanceThreshold = dialogView.findViewById(R.id.editDistanceThreshold); - EditText editLightThreshold = dialogView.findViewById(R.id.editLightThreshold); - SeekBar seekRecordInterval = dialogView.findViewById(R.id.seekRecordInterval); - TextView textIntervalValue = dialogView.findViewById(R.id.textIntervalValue); - CheckBox checkAutoRecord = dialogView.findViewById(R.id.checkAutoRecord); - Button btnCancel = dialogView.findViewById(R.id.btnCancel); - Button btnSave = dialogView.findViewById(R.id.btnSave); + TextView textDialogTitle = dialogView.findViewById(R.id.textDialogTitle); // 对话框标题 + EditText editPresetName = dialogView.findViewById(R.id.editPresetName); // 预设方案名称 + EditText editPresetDescription = dialogView.findViewById(R.id.editPresetDescription); // 预设方案描述 + EditText editTempThreshold = dialogView.findViewById(R.id.editTempThreshold); // 温度阈值 + EditText editHumiThreshold = dialogView.findViewById(R.id.editHumiThreshold); // 湿度阈值 + EditText editDistanceThreshold = dialogView.findViewById(R.id.editDistanceThreshold); // 距离阈值 + EditText editLightThreshold = dialogView.findViewById(R.id.editLightThreshold); // 光照阈值 + SeekBar seekRecordInterval = dialogView.findViewById(R.id.seekRecordInterval); // 记录间隔 + TextView textIntervalValue = dialogView.findViewById(R.id.textIntervalValue); // 记录间隔值 + CheckBox checkAutoRecord = dialogView.findViewById(R.id.checkAutoRecord); // 自动记录 + Button btnCancel = dialogView.findViewById(R.id.btnCancel); // 取消按钮 + Button btnSave = dialogView.findViewById(R.id.btnSave); // 保存按钮 // 设置标题 if (scheme == null) { - textDialogTitle.setText("添加预设方案"); + textDialogTitle.setText("添加预设方案"); // 设置标题 } else { - textDialogTitle.setText("编辑预设方案"); + textDialogTitle.setText("编辑预设方案"); // 设置标题 } // 填充数据 if (scheme != null) { - editPresetName.setText(scheme.getName()); - editPresetDescription.setText(scheme.getDescription()); - editTempThreshold.setText(String.valueOf(scheme.getTempThreshold())); - editHumiThreshold.setText(String.valueOf(scheme.getHumiThreshold())); - editDistanceThreshold.setText(String.valueOf(scheme.getDistanceThreshold())); - editLightThreshold.setText(String.valueOf(scheme.getLightThreshold())); + editPresetName.setText(scheme.getName()); // 设置预设方案名称 + editPresetDescription.setText(scheme.getDescription()); // 设置预设方案描述 + editTempThreshold.setText(String.valueOf(scheme.getTempThreshold())); // 设置温度阈值 + editHumiThreshold.setText(String.valueOf(scheme.getHumiThreshold())); // 设置湿度阈值 + editDistanceThreshold.setText(String.valueOf(scheme.getDistanceThreshold())); // 设置距离阈值 + editLightThreshold.setText(String.valueOf(scheme.getLightThreshold())); // 设置光照阈值 - int progress = (scheme.getRecordInterval() - 500) / 500; - seekRecordInterval.setProgress(progress); - checkAutoRecord.setChecked(scheme.isAutoRecord()); + int progress = (scheme.getRecordInterval() - 500) / 500; // 设置记录间隔 + seekRecordInterval.setProgress(progress); // 设置记录间隔 + checkAutoRecord.setChecked(scheme.isAutoRecord()); // 设置自动记录 } else { // 默认值 - editTempThreshold.setText("45"); - editHumiThreshold.setText("35"); - editDistanceThreshold.setText("10"); - editLightThreshold.setText("70"); - seekRecordInterval.setProgress(1); - checkAutoRecord.setChecked(true); + editTempThreshold.setText("45"); // 设置温度阈值 + editHumiThreshold.setText("35"); // 设置湿度阈值 + editDistanceThreshold.setText("10"); // 设置距离阈值 + editLightThreshold.setText("70"); // 设置光照阈值 + seekRecordInterval.setProgress(1); // 设置记录间隔 + checkAutoRecord.setChecked(true); // 设置自动记录 } // 设置SeekBar监听器 seekRecordInterval.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - int interval = (progress * 500) + 500; - if (interval < 1000) { - textIntervalValue.setText(String.format("%.1f 秒", interval / 1000.0)); + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // 设置记录间隔 + int interval = (progress * 500) + 500; // 设置记录间隔 + if (interval < 1000) { // 如果记录间隔小于1000 + textIntervalValue.setText(String.format("%.1f 秒", interval / 1000.0)); // 设置记录间隔值 } else { - textIntervalValue.setText(String.format("%d 秒", interval / 1000)); + textIntervalValue.setText(String.format("%d 秒", interval / 1000)); // 设置记录间隔值 } } @Override - public void onStartTrackingTouch(SeekBar seekBar) {} + public void onStartTrackingTouch(SeekBar seekBar) {} // 开始拖动 @Override - public void onStopTrackingTouch(SeekBar seekBar) {} + public void onStopTrackingTouch(SeekBar seekBar) {} // 停止拖动 }); // 初始化间隔显示 - int interval = (seekRecordInterval.getProgress() * 500) + 500; - if (interval < 1000) { - textIntervalValue.setText(String.format("%.1f 秒", interval / 1000.0)); + int interval = (seekRecordInterval.getProgress() * 500) + 500; // 设置记录间隔 + if (interval < 1000) { // 如果记录间隔小于1000 + textIntervalValue.setText(String.format("%.1f 秒", interval / 1000.0)); // 设置记录间隔值 } else { - textIntervalValue.setText(String.format("%d 秒", interval / 1000)); + textIntervalValue.setText(String.format("%d 秒", interval / 1000)); // 设置记录间隔值 } // 创建对话框 @@ -191,7 +191,7 @@ public class PresetManagerActivity extends Activity { btnCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - dialog.dismiss(); + dialog.dismiss(); // 关闭对话框 } }); @@ -199,39 +199,39 @@ public class PresetManagerActivity extends Activity { @Override public void onClick(View v) { try { - String name = editPresetName.getText().toString().trim(); - String description = editPresetDescription.getText().toString().trim(); - int tempThreshold = Integer.parseInt(editTempThreshold.getText().toString()); - int humiThreshold = Integer.parseInt(editHumiThreshold.getText().toString()); - int distanceThreshold = Integer.parseInt(editDistanceThreshold.getText().toString()); - int lightThreshold = Integer.parseInt(editLightThreshold.getText().toString()); - int recordInterval = (seekRecordInterval.getProgress() * 500) + 500; - boolean autoRecord = checkAutoRecord.isChecked(); + String name = editPresetName.getText().toString().trim(); // 获取预设方案名称 + String description = editPresetDescription.getText().toString().trim(); // 获取预设方案描述 + int tempThreshold = Integer.parseInt(editTempThreshold.getText().toString()); // 获取温度阈值 + int humiThreshold = Integer.parseInt(editHumiThreshold.getText().toString()); // 获取湿度阈值 + int distanceThreshold = Integer.parseInt(editDistanceThreshold.getText().toString()); // 获取距离阈值 + int lightThreshold = Integer.parseInt(editLightThreshold.getText().toString()); // 获取光照阈值 + int recordInterval = (seekRecordInterval.getProgress() * 500) + 500; // 获取记录间隔 + boolean autoRecord = checkAutoRecord.isChecked(); // 获取自动记录 // 验证输入 if (name.isEmpty()) { - Toast.makeText(PresetManagerActivity.this, "请输入方案名称", Toast.LENGTH_SHORT).show(); - return; + Toast.makeText(PresetManagerActivity.this, "请输入方案名称", Toast.LENGTH_SHORT).show(); // 显示Toast + return; // 返回 } if (tempThreshold < 0 || tempThreshold > 100) { - Toast.makeText(PresetManagerActivity.this, "温度阈值应在0-100℃之间", Toast.LENGTH_SHORT).show(); - return; + Toast.makeText(PresetManagerActivity.this, "温度阈值应在0-100℃之间", Toast.LENGTH_SHORT).show(); // 显示Toast + return; // 返回 } if (humiThreshold < 0 || humiThreshold > 100) { - Toast.makeText(PresetManagerActivity.this, "湿度阈值应在0-100%之间", Toast.LENGTH_SHORT).show(); - return; + Toast.makeText(PresetManagerActivity.this, "湿度阈值应在0-100%之间", Toast.LENGTH_SHORT).show(); // 显示Toast + return; // 返回 } if (distanceThreshold < 0 || distanceThreshold > 500) { - Toast.makeText(PresetManagerActivity.this, "距离阈值应在0-500cm之间", Toast.LENGTH_SHORT).show(); - return; + Toast.makeText(PresetManagerActivity.this, "距离阈值应在0-500cm之间", Toast.LENGTH_SHORT).show(); // 显示Toast + return; // 返回 } if (lightThreshold < 0 || lightThreshold > 100) { - Toast.makeText(PresetManagerActivity.this, "光照阈值应在0-100%之间", Toast.LENGTH_SHORT).show(); - return; + Toast.makeText(PresetManagerActivity.this, "光照阈值应在0-100%之间", Toast.LENGTH_SHORT).show(); // 显示Toast + return; // 返回 } // 保存方案 @@ -240,53 +240,53 @@ public class PresetManagerActivity extends Activity { long result = dbHelper.addPresetScheme(name, description, tempThreshold, humiThreshold, distanceThreshold, lightThreshold, recordInterval, autoRecord); if (result > 0) { - Toast.makeText(PresetManagerActivity.this, "方案添加成功", Toast.LENGTH_SHORT).show(); - loadPresetSchemes(); - dialog.dismiss(); + Toast.makeText(PresetManagerActivity.this, "方案添加成功", Toast.LENGTH_SHORT).show(); // 显示Toast + loadPresetSchemes(); // 加载预设方案 + dialog.dismiss(); // 关闭对话框 } else { - Toast.makeText(PresetManagerActivity.this, "方案添加失败", Toast.LENGTH_SHORT).show(); + Toast.makeText(PresetManagerActivity.this, "方案添加失败", Toast.LENGTH_SHORT).show(); // 显示Toast } } else { // 更新现有方案 int result = dbHelper.updatePresetScheme(scheme.getId(), name, description, tempThreshold, humiThreshold, distanceThreshold, lightThreshold, recordInterval, autoRecord); if (result > 0) { - Toast.makeText(PresetManagerActivity.this, "方案更新成功", Toast.LENGTH_SHORT).show(); - loadPresetSchemes(); - dialog.dismiss(); + Toast.makeText(PresetManagerActivity.this, "方案更新成功", Toast.LENGTH_SHORT).show(); // 显示Toast + loadPresetSchemes(); // 加载预设方案 + dialog.dismiss(); // 关闭对话框 } else { Toast.makeText(PresetManagerActivity.this, "方案更新失败", Toast.LENGTH_SHORT).show(); } } } catch (NumberFormatException e) { - Toast.makeText(PresetManagerActivity.this, "请输入有效的数值", Toast.LENGTH_SHORT).show(); + Toast.makeText(PresetManagerActivity.this, "请输入有效的数值", Toast.LENGTH_SHORT).show(); // 显示Toast } catch (Exception e) { - Toast.makeText(PresetManagerActivity.this, "保存失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); + Toast.makeText(PresetManagerActivity.this, "保存失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示Toast } } }); - dialog.show(); + dialog.show(); // 显示对话框 } /** * 应用预设方案 */ private void applyPresetScheme(PresetScheme scheme) { - SharedPreferences prefs = getSharedPreferences("BattlefieldSettings", MODE_PRIVATE); - SharedPreferences.Editor editor = prefs.edit(); + SharedPreferences prefs = getSharedPreferences("BattlefieldSettings", MODE_PRIVATE); // 获取SharedPreferences + SharedPreferences.Editor editor = prefs.edit(); // 获取Editor - editor.putInt("threshold_temp", scheme.getTempThreshold()); - editor.putInt("threshold_humi", scheme.getHumiThreshold()); - editor.putInt("threshold_distance", scheme.getDistanceThreshold()); - editor.putInt("threshold_light", scheme.getLightThreshold()); - editor.putInt("recording_interval", scheme.getRecordInterval()); - editor.putBoolean("auto_record", scheme.isAutoRecord()); + editor.putInt("threshold_temp", scheme.getTempThreshold()); // 设置温度阈值 + editor.putInt("threshold_humi", scheme.getHumiThreshold()); // 设置湿度阈值 + editor.putInt("threshold_distance", scheme.getDistanceThreshold()); // 设置距离阈值 + editor.putInt("threshold_light", scheme.getLightThreshold()); // 设置光照阈值 + editor.putInt("recording_interval", scheme.getRecordInterval()); // 设置记录间隔 + editor.putBoolean("auto_record", scheme.isAutoRecord()); // 设置自动记录 - editor.apply(); + editor.apply(); // 应用 - Toast.makeText(this, "已应用预设方案: " + scheme.getName(), Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "已应用预设方案: " + scheme.getName(), Toast.LENGTH_SHORT).show(); // 显示Toast } /** @@ -296,23 +296,23 @@ public class PresetManagerActivity extends Activity { @Override public int getCount() { - return presetSchemes.size(); + return presetSchemes.size(); // 返回预设方案数量 } @Override public PresetScheme getItem(int position) { - return presetSchemes.get(position); + return presetSchemes.get(position); // 返回预设方案 } @Override public long getItemId(int position) { - return position; + return position; // 返回位置 } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { - convertView = getLayoutInflater().inflate(R.layout.item_preset_scheme, parent, false); + convertView = getLayoutInflater().inflate(R.layout.item_preset_scheme, parent, false); // 获取布局 } PresetScheme scheme = getItem(position); @@ -327,30 +327,30 @@ public class PresetManagerActivity extends Activity { Button btnDeletePreset = convertView.findViewById(R.id.btnDeletePreset); // 设置数据 - textPresetName.setText(scheme.getName()); - textPresetDescription.setText(scheme.getDescription()); - textPresetSummary.setText(scheme.getSummary()); + textPresetName.setText(scheme.getName()); // 设置预设方案名称 + textPresetDescription.setText(scheme.getDescription()); // 设置预设方案描述 + textPresetSummary.setText(scheme.getSummary()); // 设置预设方案摘要 // 显示默认标签 if (scheme.isDefault()) { - textDefaultTag.setVisibility(View.VISIBLE); + textDefaultTag.setVisibility(View.VISIBLE); // 设置默认标签可见 } else { - textDefaultTag.setVisibility(View.GONE); + textDefaultTag.setVisibility(View.GONE); // 设置默认标签不可见 } // 设置按钮监听器 btnSelectPreset.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - selectedScheme = scheme; - Toast.makeText(PresetManagerActivity.this, "已选择: " + scheme.getName(), Toast.LENGTH_SHORT).show(); + selectedScheme = scheme; // 设置选中方案 + Toast.makeText(PresetManagerActivity.this, "已选择: " + scheme.getName(), Toast.LENGTH_SHORT).show(); // 显示Toast } }); btnEditPreset.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - showPresetEditor(scheme); + showPresetEditor(scheme); // 显示预设方案编辑器 } }); @@ -358,20 +358,20 @@ public class PresetManagerActivity extends Activity { @Override public void onClick(View v) { if (scheme.isDefault()) { - Toast.makeText(PresetManagerActivity.this, "不能删除默认方案", Toast.LENGTH_SHORT).show(); + Toast.makeText(PresetManagerActivity.this, "不能删除默认方案", Toast.LENGTH_SHORT).show(); // 显示Toast } else { - showDeleteConfirmDialog(scheme); + showDeleteConfirmDialog(scheme); // 显示删除确认对话框 } } }); // 禁用删除默认方案 if (scheme.isDefault()) { - btnDeletePreset.setEnabled(false); - btnDeletePreset.setAlpha(0.5f); + btnDeletePreset.setEnabled(false); // 禁用删除按钮 + btnDeletePreset.setAlpha(0.5f); // 设置删除按钮透明度 } else { - btnDeletePreset.setEnabled(true); - btnDeletePreset.setAlpha(1.0f); + btnDeletePreset.setEnabled(true); // 启用删除按钮 + btnDeletePreset.setAlpha(1.0f); // 设置删除按钮透明度 } return convertView; @@ -390,10 +390,10 @@ public class PresetManagerActivity extends Activity { public void onClick(DialogInterface dialog, int which) { int result = dbHelper.deletePresetScheme(scheme.getId()); if (result > 0) { - Toast.makeText(PresetManagerActivity.this, "方案删除成功", Toast.LENGTH_SHORT).show(); - loadPresetSchemes(); + Toast.makeText(PresetManagerActivity.this, "方案删除成功", Toast.LENGTH_SHORT).show(); // 显示Toast + loadPresetSchemes(); // 加载预设方案 } else { - Toast.makeText(PresetManagerActivity.this, "方案删除失败", Toast.LENGTH_SHORT).show(); + Toast.makeText(PresetManagerActivity.this, "方案删除失败", Toast.LENGTH_SHORT).show(); // 显示Toast } } }) diff --git a/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Activities/SettingsActivity.java b/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Activities/SettingsActivity.java index 6d8b55d..9888682 100644 --- a/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Activities/SettingsActivity.java +++ b/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Activities/SettingsActivity.java @@ -15,60 +15,60 @@ import android.widget.Toast; public class SettingsActivity extends Activity { // UI组件 - private CheckBox checkAutoRecord; - private SeekBar seekRecordInterval; - private TextView textIntervalValue; - private EditText editThresholdTemp; - private EditText editThresholdHumi; - private EditText editThresholdDistance; - private EditText editThresholdLight; - private Button buttonSave; - private Button buttonCancel; - private Button buttonReset; - private Button buttonPresetManager; + private CheckBox checkAutoRecord; // 自动记录 + private SeekBar seekRecordInterval; // 记录间隔 + private TextView textIntervalValue; // 记录间隔值 + private EditText editThresholdTemp; // 温度阈值 + private EditText editThresholdHumi; // 湿度阈值 + private EditText editThresholdDistance; // 距离阈值 + private EditText editThresholdLight; // 光照阈值 + private Button buttonSave; // 保存 + private Button buttonCancel; // 取消 + private Button buttonReset; // 重置 + private Button buttonPresetManager; // 预设方案管理 // 设置值 - private boolean autoRecordEnabled = true; - private int recordingInterval = 1000; - private int thresholdTemp = 45; - private int thresholdHumi = 35; - private int thresholdDistance = 10; - private int thresholdLight = 70; + private boolean autoRecordEnabled = true; // 自动记录 + private int recordingInterval = 1000; // 记录间隔 + private int thresholdTemp = 45; // 温度阈值 + private int thresholdHumi = 35; // 湿度阈值 + private int thresholdDistance = 10; // 距离阈值 + private int thresholdLight = 70; // 光照阈值 @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_settings); + protected void onCreate(Bundle savedInstanceState) { // 创建Activity + super.onCreate(savedInstanceState); // 创建Activity + setContentView(R.layout.activity_settings); // 设置布局 // 初始化UI组件 - initViews(); + initViews(); // 初始化UI组件 // 加载当前设置 - loadCurrentSettings(); + loadCurrentSettings(); // 加载当前设置 // 设置UI值 - updateUI(); + updateUI(); // 设置UI值 // 设置事件监听器 - setupListeners(); + setupListeners(); // 设置事件监听器 } - private void initViews() { - checkAutoRecord = findViewById(R.id.checkAutoRecord); - seekRecordInterval = findViewById(R.id.seekRecordInterval); - textIntervalValue = findViewById(R.id.textIntervalValue); - editThresholdTemp = findViewById(R.id.editThresholdTemp); - editThresholdHumi = findViewById(R.id.editThresholdHumi); - editThresholdDistance = findViewById(R.id.editThresholdDistance); - editThresholdLight = findViewById(R.id.editThresholdLight); - buttonSave = findViewById(R.id.buttonSave); - buttonCancel = findViewById(R.id.buttonCancel); - buttonReset = findViewById(R.id.buttonReset); - buttonPresetManager = findViewById(R.id.buttonPresetManager); + private void initViews() { // 初始化UI组件 + checkAutoRecord = findViewById(R.id.checkAutoRecord); // 自动记录 + seekRecordInterval = findViewById(R.id.seekRecordInterval); // 记录间隔 + textIntervalValue = findViewById(R.id.textIntervalValue); // 记录间隔值 + editThresholdTemp = findViewById(R.id.editThresholdTemp); // 温度阈值 + editThresholdHumi = findViewById(R.id.editThresholdHumi); // 湿度阈值 + editThresholdDistance = findViewById(R.id.editThresholdDistance); // 距离阈值 + editThresholdLight = findViewById(R.id.editThresholdLight); // 光照阈值 + buttonSave = findViewById(R.id.buttonSave); // 保存 + buttonCancel = findViewById(R.id.buttonCancel); // 取消 + buttonReset = findViewById(R.id.buttonReset); // 重置 + buttonPresetManager = findViewById(R.id.buttonPresetManager); // 预设方案管理 } - private void loadCurrentSettings() { - SharedPreferences prefs = getSharedPreferences("BattlefieldSettings", MODE_PRIVATE); + private void loadCurrentSettings() { // 加载当前设置 + SharedPreferences prefs = getSharedPreferences("BattlefieldSettings", MODE_PRIVATE); // 获取SharedPreferences autoRecordEnabled = prefs.getBoolean("auto_record", true); recordingInterval = prefs.getInt("recording_interval", 1000); thresholdTemp = prefs.getInt("threshold_temp", 45); @@ -77,41 +77,41 @@ public class SettingsActivity extends Activity { thresholdLight = prefs.getInt("threshold_light", 70); } - private void updateUI() { - checkAutoRecord.setChecked(autoRecordEnabled); + private void updateUI() { // 设置UI值 + checkAutoRecord.setChecked(autoRecordEnabled); // 设置自动记录 // 设置记录间隔 (0.5秒到30秒,步长0.5秒) int progress = (recordingInterval - 500) / 500; // 转换为SeekBar进度值 - seekRecordInterval.setProgress(progress); - updateIntervalText(); + seekRecordInterval.setProgress(progress); // 设置记录间隔 + updateIntervalText(); // 更新记录间隔值 - editThresholdTemp.setText(String.valueOf(thresholdTemp)); - editThresholdHumi.setText(String.valueOf(thresholdHumi)); - editThresholdDistance.setText(String.valueOf(thresholdDistance)); - editThresholdLight.setText(String.valueOf(thresholdLight)); + editThresholdTemp.setText(String.valueOf(thresholdTemp)); // 设置温度阈值 + editThresholdHumi.setText(String.valueOf(thresholdHumi)); // 设置湿度阈值 + editThresholdDistance.setText(String.valueOf(thresholdDistance)); // 设置距离阈值 + editThresholdLight.setText(String.valueOf(thresholdLight)); // 设置光照阈值 } - private void setupListeners() { + private void setupListeners() { // 设置事件监听器 // 记录间隔滑块 seekRecordInterval.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { recordingInterval = (progress * 500) + 500; // 0.5秒到30秒 - updateIntervalText(); + updateIntervalText(); // 更新记录间隔值 } @Override - public void onStartTrackingTouch(SeekBar seekBar) {} + public void onStartTrackingTouch(SeekBar seekBar) {} // 开始拖动 @Override - public void onStopTrackingTouch(SeekBar seekBar) {} + public void onStopTrackingTouch(SeekBar seekBar) {} // 停止拖动 }); // 保存按钮 buttonSave.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - saveSettings(); + saveSettings(); // 保存设置 } }); @@ -119,7 +119,7 @@ public class SettingsActivity extends Activity { buttonCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - finish(); + finish(); // 结束当前Activity } }); @@ -127,7 +127,7 @@ public class SettingsActivity extends Activity { buttonReset.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - resetToDefaults(); + resetToDefaults(); // 重置为默认设置 } }); @@ -135,99 +135,99 @@ public class SettingsActivity extends Activity { buttonPresetManager.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Intent intent = new Intent(SettingsActivity.this, PresetManagerActivity.class); - startActivityForResult(intent, 100); + Intent intent = new Intent(SettingsActivity.this, PresetManagerActivity.class); // 创建Intent + startActivityForResult(intent, 100); // 启动Activity } }); } - private void updateIntervalText() { - if (recordingInterval < 1000) { - textIntervalValue.setText(String.format("%.1f 秒", recordingInterval / 1000.0)); + private void updateIntervalText() { // 更新记录间隔值 + if (recordingInterval < 1000) { // 如果记录间隔小于1000 + textIntervalValue.setText(String.format("%.1f 秒", recordingInterval / 1000.0)); // 设置记录间隔值 } else { - textIntervalValue.setText(String.format("%d 秒", recordingInterval / 1000)); + textIntervalValue.setText(String.format("%d 秒", recordingInterval / 1000)); // 设置记录间隔值 } } - private void saveSettings() { + private void saveSettings() { // 保存设置 try { // 获取用户输入 autoRecordEnabled = checkAutoRecord.isChecked(); - thresholdTemp = Integer.parseInt(editThresholdTemp.getText().toString()); - thresholdHumi = Integer.parseInt(editThresholdHumi.getText().toString()); - thresholdDistance = Integer.parseInt(editThresholdDistance.getText().toString()); - thresholdLight = Integer.parseInt(editThresholdLight.getText().toString()); + thresholdTemp = Integer.parseInt(editThresholdTemp.getText().toString()); // 设置温度阈值 + thresholdHumi = Integer.parseInt(editThresholdHumi.getText().toString()); // 设置湿度阈值 + thresholdDistance = Integer.parseInt(editThresholdDistance.getText().toString()); // 设置距离阈值 + thresholdLight = Integer.parseInt(editThresholdLight.getText().toString()); // 设置光照阈值 // 验证输入值 if (thresholdTemp < 0 || thresholdTemp > 100) { - Toast.makeText(this, "温度阈值应在0-100℃之间", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "温度阈值应在0-100℃之间", Toast.LENGTH_SHORT).show(); // 显示Toast return; } if (thresholdHumi < 0 || thresholdHumi > 100) { - Toast.makeText(this, "湿度阈值应在0-100%之间", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "湿度阈值应在0-100%之间", Toast.LENGTH_SHORT).show(); // 显示Toast return; } if (thresholdDistance < 0 || thresholdDistance > 500) { - Toast.makeText(this, "距离阈值应在0-500cm之间", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "距离阈值应在0-500cm之间", Toast.LENGTH_SHORT).show(); // 显示Toast return; } if (thresholdLight < 0 || thresholdLight > 100) { - Toast.makeText(this, "光照阈值应在0-100%之间", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "光照阈值应在0-100%之间", Toast.LENGTH_SHORT).show(); // 显示Toast return; } // 保存到SharedPreferences - SharedPreferences prefs = getSharedPreferences("BattlefieldSettings", MODE_PRIVATE); - SharedPreferences.Editor editor = prefs.edit(); - editor.putBoolean("auto_record", autoRecordEnabled); - editor.putInt("recording_interval", recordingInterval); - editor.putInt("threshold_temp", thresholdTemp); - editor.putInt("threshold_humi", thresholdHumi); - editor.putInt("threshold_distance", thresholdDistance); - editor.putInt("threshold_light", thresholdLight); - editor.apply(); + SharedPreferences prefs = getSharedPreferences("BattlefieldSettings", MODE_PRIVATE); // 获取SharedPreferences + SharedPreferences.Editor editor = prefs.edit(); // 获取Editor + editor.putBoolean("auto_record", autoRecordEnabled); // 设置自动记录 + editor.putInt("recording_interval", recordingInterval); // 设置记录间隔 + editor.putInt("threshold_temp", thresholdTemp); // 设置温度阈值 + editor.putInt("threshold_humi", thresholdHumi); // 设置湿度阈值 + editor.putInt("threshold_distance", thresholdDistance); // 设置距离阈值 + editor.putInt("threshold_light", thresholdLight); // 设置光照阈值 + editor.apply(); // 应用 // 返回结果 - setResult(RESULT_OK); - Toast.makeText(this, "设置已保存", Toast.LENGTH_SHORT).show(); - finish(); + setResult(RESULT_OK); // 设置返回结果 + Toast.makeText(this, "设置已保存", Toast.LENGTH_SHORT).show(); // 显示Toast + finish(); // 结束当前Activity } catch (NumberFormatException e) { - Toast.makeText(this, "请输入有效的数值", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "请输入有效的数值", Toast.LENGTH_SHORT).show(); // 显示Toast } catch (Exception e) { - Toast.makeText(this, "保存设置失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "保存设置失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 显示Toast } } - private void resetToDefaults() { - autoRecordEnabled = true; - recordingInterval = 1000; - thresholdTemp = 45; - thresholdHumi = 35; - thresholdDistance = 10; - thresholdLight = 70; + private void resetToDefaults() { // 重置为默认设置 + autoRecordEnabled = true; // 设置自动记录 + recordingInterval = 1000; // 设置记录间隔 + thresholdTemp = 45; // 设置温度阈值 + thresholdHumi = 35; // 设置湿度阈值 + thresholdDistance = 10; // 设置距离阈值 + thresholdLight = 70; // 设置光照阈值 - updateUI(); - Toast.makeText(this, "已重置为默认设置", Toast.LENGTH_SHORT).show(); + updateUI(); // 更新UI + Toast.makeText(this, "已重置为默认设置", Toast.LENGTH_SHORT).show(); // 显示Toast } /** * 返回按钮点击事件 */ - public void onBackButtonClicked(View view) { - finish(); + public void onBackButtonClicked(View view) { // 返回按钮点击事件 + finish(); // 结束当前Activity } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); + super.onActivityResult(requestCode, resultCode, data); // 处理Activity返回结果 - if (requestCode == 100 && resultCode == RESULT_OK) { + if (requestCode == 100 && resultCode == RESULT_OK) { // 如果请求码为100且结果码为RESULT_OK // 从预设方案管理器返回,重新加载设置 - loadCurrentSettings(); - updateUI(); - Toast.makeText(this, "预设方案已应用,请保存设置", Toast.LENGTH_SHORT).show(); + loadCurrentSettings(); // 重新加载设置 + updateUI(); // 更新UI + Toast.makeText(this, "预设方案已应用,请保存设置", Toast.LENGTH_SHORT).show(); // 显示Toast } } } \ No newline at end of file diff --git a/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Database/DatabaseHelper.java b/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Database/DatabaseHelper.java index 5077cac..35685cc 100644 --- a/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Database/DatabaseHelper.java +++ b/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Database/DatabaseHelper.java @@ -19,46 +19,46 @@ import com.test.Bluetooh_736_2.Models.PresetScheme; public class DatabaseHelper extends SQLiteOpenHelper { // 数据库基本信息 - private static final String DATABASE_NAME = "BattlefieldDetection.db"; + private static final String DATABASE_NAME = "BattlefieldDetection.db"; // 数据库名称 private static final int DATABASE_VERSION = 3; // 数据表名 - private static final String TABLE_SENSOR_DATA = "sensor_data"; - private static final String TABLE_PRESET_SCHEMES = "preset_schemes"; + private static final String TABLE_SENSOR_DATA = "sensor_data"; // 传感器数据表名 + private static final String TABLE_PRESET_SCHEMES = "preset_schemes"; // 预设方案表名 // 传感器数据表字段 - private static final String COLUMN_ID = "id"; - private static final String COLUMN_TIMESTAMP = "timestamp"; - private static final String COLUMN_TEMPERATURE = "temperature"; - private static final String COLUMN_HUMIDITY = "humidity"; - private static final String COLUMN_LIGHT = "light"; - private static final String COLUMN_DISTANCE = "distance"; - private static final String COLUMN_TIME_MINUTES = "time_minutes"; - private static final String COLUMN_MODE = "mode"; - private static final String COLUMN_IS_TRIGGERED = "is_triggered"; - private static final String COLUMN_TRIGGER_CONDITIONS = "trigger_conditions"; + private static final String COLUMN_ID = "id"; // ID + private static final String COLUMN_TIMESTAMP = "timestamp"; // 时间戳 + private static final String COLUMN_TEMPERATURE = "temperature"; // 温度 + private static final String COLUMN_HUMIDITY = "humidity"; // 湿度 + private static final String COLUMN_LIGHT = "light"; // 光照 + private static final String COLUMN_DISTANCE = "distance"; // 距离 + private static final String COLUMN_TIME_MINUTES = "time_minutes"; // 时间(分钟) + private static final String COLUMN_MODE = "mode"; // 模式 + private static final String COLUMN_IS_TRIGGERED = "is_triggered"; // 触发状态 + private static final String COLUMN_TRIGGER_CONDITIONS = "trigger_conditions"; // 触发条件 // 预设方案表字段 - private static final String COLUMN_PRESET_ID = "preset_id"; - private static final String COLUMN_PRESET_NAME = "preset_name"; - private static final String COLUMN_PRESET_DESCRIPTION = "preset_description"; - private static final String COLUMN_PRESET_TEMP_THRESHOLD = "temp_threshold"; - private static final String COLUMN_PRESET_HUMI_THRESHOLD = "humi_threshold"; - private static final String COLUMN_PRESET_DISTANCE_THRESHOLD = "distance_threshold"; - private static final String COLUMN_PRESET_LIGHT_THRESHOLD = "light_threshold"; - private static final String COLUMN_PRESET_RECORD_INTERVAL = "record_interval"; - private static final String COLUMN_PRESET_AUTO_RECORD = "auto_record"; - private static final String COLUMN_PRESET_CREATED_TIME = "created_time"; - private static final String COLUMN_PRESET_IS_DEFAULT = "is_default"; + private static final String COLUMN_PRESET_ID = "preset_id"; // ID + private static final String COLUMN_PRESET_NAME = "preset_name"; // 预设方案名称 + private static final String COLUMN_PRESET_DESCRIPTION = "preset_description"; // 预设方案描述 + private static final String COLUMN_PRESET_TEMP_THRESHOLD = "temp_threshold"; // 温度阈值 + private static final String COLUMN_PRESET_HUMI_THRESHOLD = "humi_threshold"; // 湿度阈值 + private static final String COLUMN_PRESET_DISTANCE_THRESHOLD = "distance_threshold"; // 距离阈值 + private static final String COLUMN_PRESET_LIGHT_THRESHOLD = "light_threshold"; // 光照阈值 + private static final String COLUMN_PRESET_RECORD_INTERVAL = "record_interval"; // 记录间隔 + private static final String COLUMN_PRESET_AUTO_RECORD = "auto_record"; // 自动记录 + private static final String COLUMN_PRESET_CREATED_TIME = "created_time"; // 创建时间 + private static final String COLUMN_PRESET_IS_DEFAULT = "is_default"; // 是否默认 - public DatabaseHelper(Context context) { + public DatabaseHelper(Context context) { // 构造函数 super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override - public void onCreate(SQLiteDatabase db) { + public void onCreate(SQLiteDatabase db) { // 创建数据库 // 创建传感器数据表 - String CREATE_SENSOR_TABLE = "CREATE TABLE " + TABLE_SENSOR_DATA + "(" + String CREATE_SENSOR_TABLE = "CREATE TABLE " + TABLE_SENSOR_DATA + "(" // 创建传感器数据表 + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_TIMESTAMP + " TEXT NOT NULL," + COLUMN_TEMPERATURE + " INTEGER," @@ -73,7 +73,7 @@ public class DatabaseHelper extends SQLiteOpenHelper { db.execSQL(CREATE_SENSOR_TABLE); // 创建预设方案表 - String CREATE_PRESET_TABLE = "CREATE TABLE " + TABLE_PRESET_SCHEMES + "(" + String CREATE_PRESET_TABLE = "CREATE TABLE " + TABLE_PRESET_SCHEMES + "(" // 创建预设方案表 + COLUMN_PRESET_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_PRESET_NAME + " TEXT NOT NULL," + COLUMN_PRESET_DESCRIPTION + " TEXT," @@ -93,40 +93,40 @@ public class DatabaseHelper extends SQLiteOpenHelper { } @Override - public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 升级数据库 // 升级数据库时处理版本兼容 if (oldVersion < 2) { // 版本1 -> 版本2:添加触发状态和触发条件字段 try { - db.execSQL("ALTER TABLE " + TABLE_SENSOR_DATA + " ADD COLUMN " + COLUMN_IS_TRIGGERED + " INTEGER DEFAULT 0"); - db.execSQL("ALTER TABLE " + TABLE_SENSOR_DATA + " ADD COLUMN " + COLUMN_TRIGGER_CONDITIONS + " TEXT"); + db.execSQL("ALTER TABLE " + TABLE_SENSOR_DATA + " ADD COLUMN " + COLUMN_IS_TRIGGERED + " INTEGER DEFAULT 0"); // 添加触发状态字段 + db.execSQL("ALTER TABLE " + TABLE_SENSOR_DATA + " ADD COLUMN " + COLUMN_TRIGGER_CONDITIONS + " TEXT"); // 添加触发条件字段 Log.d("DatabaseHelper", "数据库升级成功:添加触发状态字段"); } catch (Exception e) { Log.e("DatabaseHelper", "数据库升级失败,重新创建表", e); // 如果升级失败,删除旧表并创建新表 - db.execSQL("DROP TABLE IF EXISTS " + TABLE_SENSOR_DATA); - onCreate(db); + db.execSQL("DROP TABLE IF EXISTS " + TABLE_SENSOR_DATA); // 删除旧表 + onCreate(db); // 创建新表 } } if (oldVersion < 3) { // 版本2 -> 版本3:添加预设方案表 try { - String CREATE_PRESET_TABLE = "CREATE TABLE " + TABLE_PRESET_SCHEMES + "(" - + COLUMN_PRESET_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," - + COLUMN_PRESET_NAME + " TEXT NOT NULL," - + COLUMN_PRESET_DESCRIPTION + " TEXT," - + COLUMN_PRESET_TEMP_THRESHOLD + " INTEGER DEFAULT 45," - + COLUMN_PRESET_HUMI_THRESHOLD + " INTEGER DEFAULT 35," - + COLUMN_PRESET_DISTANCE_THRESHOLD + " INTEGER DEFAULT 10," - + COLUMN_PRESET_LIGHT_THRESHOLD + " INTEGER DEFAULT 70," - + COLUMN_PRESET_RECORD_INTERVAL + " INTEGER DEFAULT 1000," - + COLUMN_PRESET_AUTO_RECORD + " INTEGER DEFAULT 1," - + COLUMN_PRESET_CREATED_TIME + " TEXT NOT NULL," - + COLUMN_PRESET_IS_DEFAULT + " INTEGER DEFAULT 0" + String CREATE_PRESET_TABLE = "CREATE TABLE " + TABLE_PRESET_SCHEMES + "(" // 创建预设方案表 + + COLUMN_PRESET_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," // 预设方案ID + + COLUMN_PRESET_NAME + " TEXT NOT NULL," // 预设方案名称 + + COLUMN_PRESET_DESCRIPTION + " TEXT," // 预设方案描述 + + COLUMN_PRESET_TEMP_THRESHOLD + " INTEGER DEFAULT 45," // 温度阈值 + + COLUMN_PRESET_HUMI_THRESHOLD + " INTEGER DEFAULT 35," // 湿度阈值 + + COLUMN_PRESET_DISTANCE_THRESHOLD + " INTEGER DEFAULT 10," // 距离阈值 + + COLUMN_PRESET_LIGHT_THRESHOLD + " INTEGER DEFAULT 70," // 光照阈值 + + COLUMN_PRESET_RECORD_INTERVAL + " INTEGER DEFAULT 1000," // 记录间隔 + + COLUMN_PRESET_AUTO_RECORD + " INTEGER DEFAULT 1," // 自动记录 + + COLUMN_PRESET_CREATED_TIME + " TEXT NOT NULL," // 创建时间 + + COLUMN_PRESET_IS_DEFAULT + " INTEGER DEFAULT 0" // 是否默认 + ")"; - db.execSQL(CREATE_PRESET_TABLE); - insertDefaultPresets(db); + db.execSQL(CREATE_PRESET_TABLE); // 执行创建预设方案表的SQL语句 + insertDefaultPresets(db); // 插入默认预设方案 Log.d("DatabaseHelper", "数据库升级成功:添加预设方案表"); } catch (Exception e) { Log.e("DatabaseHelper", "添加预设方案表失败", e); @@ -138,277 +138,277 @@ public class DatabaseHelper extends SQLiteOpenHelper { * 添加传感器数据记录 */ public long addSensorData(int temperature, int humidity, int light, int distance, int timeMinutes, String mode, boolean isTriggered, String triggerConditions) { - SQLiteDatabase db = this.getWritableDatabase(); - - ContentValues values = new ContentValues(); - values.put(COLUMN_TIMESTAMP, getCurrentTimestamp()); - values.put(COLUMN_TEMPERATURE, temperature); - values.put(COLUMN_HUMIDITY, humidity); - values.put(COLUMN_LIGHT, light); - values.put(COLUMN_DISTANCE, distance); - values.put(COLUMN_TIME_MINUTES, timeMinutes); - values.put(COLUMN_MODE, mode); - values.put(COLUMN_IS_TRIGGERED, isTriggered ? 1 : 0); - values.put(COLUMN_TRIGGER_CONDITIONS, triggerConditions); - - long id = db.insert(TABLE_SENSOR_DATA, null, values); - db.close(); - return id; + SQLiteDatabase db = this.getWritableDatabase(); // 获取可写数据库 + + ContentValues values = new ContentValues(); // 创建ContentValues对象 + values.put(COLUMN_TIMESTAMP, getCurrentTimestamp()); // 设置时间戳 + values.put(COLUMN_TEMPERATURE, temperature); // 设置温度 + values.put(COLUMN_HUMIDITY, humidity); // 设置湿度 + values.put(COLUMN_LIGHT, light); // 设置光照 + values.put(COLUMN_DISTANCE, distance); // 设置距离 + values.put(COLUMN_TIME_MINUTES, timeMinutes); // 设置时间(分钟) + values.put(COLUMN_MODE, mode); // 设置模式 + values.put(COLUMN_IS_TRIGGERED, isTriggered ? 1 : 0); // 设置触发状态 + values.put(COLUMN_TRIGGER_CONDITIONS, triggerConditions); // 设置触发条件 + + long id = db.insert(TABLE_SENSOR_DATA, null, values); // 插入数据 + db.close(); // 关闭数据库 + return id; // 返回ID } /** * 添加传感器数据记录(兼容旧版本) */ - public long addSensorData(int temperature, int humidity, int light, int distance, int timeMinutes, String mode) { - return addSensorData(temperature, humidity, light, distance, timeMinutes, mode, false, ""); + public long addSensorData(int temperature, int humidity, int light, int distance, int timeMinutes, String mode) { // 添加传感器数据记录(兼容旧版本) + return addSensorData(temperature, humidity, light, distance, timeMinutes, mode, false, ""); // 调用添加传感器数据记录的方法 } /** * 获取所有传感器数据 */ - public List getAllSensorData() { - List dataList = new ArrayList<>(); - String selectQuery = "SELECT * FROM " + TABLE_SENSOR_DATA + " ORDER BY " + COLUMN_TIMESTAMP + " DESC"; + public List getAllSensorData() { // 获取所有传感器数据 + List dataList = new ArrayList<>(); // 创建SensorData列表 + String selectQuery = "SELECT * FROM " + TABLE_SENSOR_DATA + " ORDER BY " + COLUMN_TIMESTAMP + " DESC"; // 创建查询语句 - SQLiteDatabase db = this.getReadableDatabase(); - Cursor cursor = db.rawQuery(selectQuery, null); + SQLiteDatabase db = this.getReadableDatabase(); // 获取可读数据库 + Cursor cursor = db.rawQuery(selectQuery, null); // 执行查询 if (cursor.moveToFirst()) { do { - SensorData data = createSensorDataFromCursor(cursor); - dataList.add(data); + SensorData data = createSensorDataFromCursor(cursor); // 创建SensorData对象 + dataList.add(data); // 添加到列表 } while (cursor.moveToNext()); } - cursor.close(); - db.close(); - return dataList; + cursor.close(); // 关闭游标 + db.close(); // 关闭数据库 + return dataList; // 返回数据列表 } /** * 获取最近N条记录 */ - public List getRecentData(int limit) { - List dataList = new ArrayList<>(); - String selectQuery = "SELECT * FROM " + TABLE_SENSOR_DATA + " ORDER BY " + COLUMN_TIMESTAMP + " DESC LIMIT " + limit; + public List getRecentData(int limit) { // 获取最近N条记录 + List dataList = new ArrayList<>(); // 创建SensorData列表 + String selectQuery = "SELECT * FROM " + TABLE_SENSOR_DATA + " ORDER BY " + COLUMN_TIMESTAMP + " DESC LIMIT " + limit; // 创建查询语句 - SQLiteDatabase db = this.getReadableDatabase(); - Cursor cursor = db.rawQuery(selectQuery, null); + SQLiteDatabase db = this.getReadableDatabase(); // 获取可读数据库 + Cursor cursor = db.rawQuery(selectQuery, null); // 执行查询 if (cursor.moveToFirst()) { do { - SensorData data = createSensorDataFromCursor(cursor); - dataList.add(data); + SensorData data = createSensorDataFromCursor(cursor); // 创建SensorData对象 + dataList.add(data); // 添加到列表 } while (cursor.moveToNext()); } - cursor.close(); - db.close(); - return dataList; + cursor.close(); // 关闭游标 + db.close(); // 关闭数据库 + return dataList; // 返回数据列表 } /** * 获取指定日期范围的数据 */ - public List getDataByDateRange(String startDate, String endDate) { - List dataList = new ArrayList<>(); + public List getDataByDateRange(String startDate, String endDate) { // 获取指定日期范围的数据 + List dataList = new ArrayList<>(); // 创建SensorData列表 String selectQuery = "SELECT * FROM " + TABLE_SENSOR_DATA + - " WHERE " + COLUMN_TIMESTAMP + " BETWEEN '" + startDate + "' AND '" + endDate + "'" + + " WHERE " + COLUMN_TIMESTAMP + " BETWEEN '" + startDate + "' AND '" + endDate + "'" + // 创建查询语句 " ORDER BY " + COLUMN_TIMESTAMP + " ASC"; - SQLiteDatabase db = this.getReadableDatabase(); - Cursor cursor = db.rawQuery(selectQuery, null); + SQLiteDatabase db = this.getReadableDatabase(); // 获取可读数据库 + Cursor cursor = db.rawQuery(selectQuery, null); // 执行查询 if (cursor.moveToFirst()) { do { - SensorData data = createSensorDataFromCursor(cursor); - dataList.add(data); + SensorData data = createSensorDataFromCursor(cursor); // 创建SensorData对象 + dataList.add(data); // 添加到列表 } while (cursor.moveToNext()); } - cursor.close(); - db.close(); - return dataList; + cursor.close(); // 关闭游标 + db.close(); // 关闭数据库 + return dataList; // 返回数据列表 } /** * 按触发状态筛选数据 */ - public List getDataByTriggerStatus(boolean isTriggered) { - List dataList = new ArrayList<>(); + public List getDataByTriggerStatus(boolean isTriggered) { // 按触发状态筛选数据 + List dataList = new ArrayList<>(); // 创建SensorData列表 String selectQuery = "SELECT * FROM " + TABLE_SENSOR_DATA + - " WHERE " + COLUMN_IS_TRIGGERED + " = ?" + + " WHERE " + COLUMN_IS_TRIGGERED + " = ?" + // 创建查询语句 " ORDER BY " + COLUMN_TIMESTAMP + " DESC"; - SQLiteDatabase db = this.getReadableDatabase(); - Cursor cursor = db.rawQuery(selectQuery, new String[]{isTriggered ? "1" : "0"}); + SQLiteDatabase db = this.getReadableDatabase(); // 获取可读数据库 + Cursor cursor = db.rawQuery(selectQuery, new String[]{isTriggered ? "1" : "0"}); // 执行查询 if (cursor.moveToFirst()) { do { - SensorData data = createSensorDataFromCursor(cursor); - dataList.add(data); + SensorData data = createSensorDataFromCursor(cursor); // 创建SensorData对象 + dataList.add(data); // 添加到列表 } while (cursor.moveToNext()); } - cursor.close(); - db.close(); - return dataList; + cursor.close(); // 关闭游标 + db.close(); // 关闭数据库 + return dataList; // 返回数据列表 } /** * 按时间区段和触发状态筛选数据 */ - public List getDataByDateRangeAndTriggerStatus(String startDate, String endDate, Boolean isTriggered) { - List dataList = new ArrayList<>(); - StringBuilder queryBuilder = new StringBuilder(); - queryBuilder.append("SELECT * FROM ").append(TABLE_SENSOR_DATA) + public List getDataByDateRangeAndTriggerStatus(String startDate, String endDate, Boolean isTriggered) { // 按时间区段和触发状态筛选数据 + List dataList = new ArrayList<>(); // 创建SensorData列表 + StringBuilder queryBuilder = new StringBuilder(); // 创建StringBuilder对象 + queryBuilder.append("SELECT * FROM ").append(TABLE_SENSOR_DATA) // 创建查询语句 .append(" WHERE ").append(COLUMN_TIMESTAMP) - .append(" BETWEEN '").append(startDate).append("' AND '").append(endDate).append("'"); + .append(" BETWEEN '").append(startDate).append("' AND '").append(endDate).append("'"); // 创建查询语句 - if (isTriggered != null) { + if (isTriggered != null) { // 如果触发状态不为空 queryBuilder.append(" AND ").append(COLUMN_IS_TRIGGERED).append(" = ").append(isTriggered ? "1" : "0"); } queryBuilder.append(" ORDER BY ").append(COLUMN_TIMESTAMP).append(" ASC"); - SQLiteDatabase db = this.getReadableDatabase(); - Cursor cursor = db.rawQuery(queryBuilder.toString(), null); + SQLiteDatabase db = this.getReadableDatabase(); // 获取可读数据库 + Cursor cursor = db.rawQuery(queryBuilder.toString(), null); // 执行查询 if (cursor.moveToFirst()) { do { - SensorData data = createSensorDataFromCursor(cursor); - dataList.add(data); + SensorData data = createSensorDataFromCursor(cursor); // 创建SensorData对象 + dataList.add(data); // 添加到列表 } while (cursor.moveToNext()); } - cursor.close(); - db.close(); - return dataList; + cursor.close(); // 关闭游标 + db.close(); // 关闭数据库 + return dataList; // 返回数据列表 } /** * 获取数据统计信息 */ - public DataStatistics getDataStatistics() { - DataStatistics stats = new DataStatistics(); - SQLiteDatabase db = this.getReadableDatabase(); + public DataStatistics getDataStatistics() { // 获取数据统计信息 + DataStatistics stats = new DataStatistics(); // 创建DataStatistics对象 + SQLiteDatabase db = this.getReadableDatabase(); // 获取可读数据库 // 获取总记录数 - Cursor countCursor = db.rawQuery("SELECT COUNT(*) FROM " + TABLE_SENSOR_DATA, null); - if (countCursor.moveToFirst()) { - stats.setTotalRecords(countCursor.getInt(0)); + Cursor countCursor = db.rawQuery("SELECT COUNT(*) FROM " + TABLE_SENSOR_DATA, null); // 执行查询 + if (countCursor.moveToFirst()) { // 如果游标移动到第一行 + stats.setTotalRecords(countCursor.getInt(0)); // 设置总记录数 } - countCursor.close(); + countCursor.close(); // 关闭游标 // 获取温度统计 - Cursor tempCursor = db.rawQuery("SELECT MIN(" + COLUMN_TEMPERATURE + "), MAX(" + COLUMN_TEMPERATURE + "), AVG(" + COLUMN_TEMPERATURE + ") FROM " + TABLE_SENSOR_DATA, null); - if (tempCursor.moveToFirst()) { - stats.setMinTemperature(tempCursor.getInt(0)); - stats.setMaxTemperature(tempCursor.getInt(1)); - stats.setAvgTemperature(tempCursor.getFloat(2)); + Cursor tempCursor = db.rawQuery("SELECT MIN(" + COLUMN_TEMPERATURE + "), MAX(" + COLUMN_TEMPERATURE + "), AVG(" + COLUMN_TEMPERATURE + ") FROM " + TABLE_SENSOR_DATA, null); // 执行查询 + if (tempCursor.moveToFirst()) { // 如果游标移动到第一行 + stats.setMinTemperature(tempCursor.getInt(0)); // 设置最小温度 + stats.setMaxTemperature(tempCursor.getInt(1)); // 设置最大温度 + stats.setAvgTemperature(tempCursor.getFloat(2)); // 设置平均温度 } - tempCursor.close(); + tempCursor.close(); // 关闭游标 // 获取湿度统计 - Cursor humiCursor = db.rawQuery("SELECT MIN(" + COLUMN_HUMIDITY + "), MAX(" + COLUMN_HUMIDITY + "), AVG(" + COLUMN_HUMIDITY + ") FROM " + TABLE_SENSOR_DATA, null); - if (humiCursor.moveToFirst()) { - stats.setMinHumidity(humiCursor.getInt(0)); - stats.setMaxHumidity(humiCursor.getInt(1)); - stats.setAvgHumidity(humiCursor.getFloat(2)); + Cursor humiCursor = db.rawQuery("SELECT MIN(" + COLUMN_HUMIDITY + "), MAX(" + COLUMN_HUMIDITY + "), AVG(" + COLUMN_HUMIDITY + ") FROM " + TABLE_SENSOR_DATA, null); // 执行查询 + if (humiCursor.moveToFirst()) { // 如果游标移动到第一行 + stats.setMinHumidity(humiCursor.getInt(0)); // 设置最小湿度 + stats.setMaxHumidity(humiCursor.getInt(1)); // 设置最大湿度 + stats.setAvgHumidity(humiCursor.getFloat(2)); // 设置平均湿度 } - humiCursor.close(); + humiCursor.close(); // 关闭游标 // 获取光照统计 - Cursor lightCursor = db.rawQuery("SELECT MIN(" + COLUMN_LIGHT + "), MAX(" + COLUMN_LIGHT + "), AVG(" + COLUMN_LIGHT + ") FROM " + TABLE_SENSOR_DATA, null); - if (lightCursor.moveToFirst()) { - stats.setMinLight(lightCursor.getInt(0)); - stats.setMaxLight(lightCursor.getInt(1)); - stats.setAvgLight(lightCursor.getFloat(2)); + Cursor lightCursor = db.rawQuery("SELECT MIN(" + COLUMN_LIGHT + "), MAX(" + COLUMN_LIGHT + "), AVG(" + COLUMN_LIGHT + ") FROM " + TABLE_SENSOR_DATA, null); // 执行查询 + if (lightCursor.moveToFirst()) { // 如果游标移动到第一行 + stats.setMinLight(lightCursor.getInt(0)); // 设置最小光照 + stats.setMaxLight(lightCursor.getInt(1)); // 设置最大光照 + stats.setAvgLight(lightCursor.getFloat(2)); // 设置平均光照 } - lightCursor.close(); + lightCursor.close(); // 关闭游标 - db.close(); - return stats; + db.close(); // 关闭数据库 + return stats; // 返回数据统计信息 } /** * 删除指定天数之前的数据 */ - public int deleteOldData(int daysToKeep) { - SQLiteDatabase db = this.getWritableDatabase(); + public int deleteOldData(int daysToKeep) { // 删除指定天数之前的数据 + SQLiteDatabase db = this.getWritableDatabase(); // 获取可写数据库 // 计算删除时间点 - long cutoffTime = System.currentTimeMillis() - (daysToKeep * 24 * 60 * 60 * 1000L); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); - String cutoffDate = sdf.format(new Date(cutoffTime)); + long cutoffTime = System.currentTimeMillis() - (daysToKeep * 24 * 60 * 60 * 1000L); // 计算删除时间点 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); // 创建SimpleDateFormat对象 + String cutoffDate = sdf.format(new Date(cutoffTime)); // 计算删除时间点 - int deletedRows = db.delete(TABLE_SENSOR_DATA, COLUMN_TIMESTAMP + " < ?", new String[]{cutoffDate}); - db.close(); - return deletedRows; + int deletedRows = db.delete(TABLE_SENSOR_DATA, COLUMN_TIMESTAMP + " < ?", new String[]{cutoffDate}); // 删除数据 + db.close(); // 关闭数据库 + return deletedRows; // 返回删除的行数 } /** * 清空所有数据 */ - public void clearAllData() { - SQLiteDatabase db = this.getWritableDatabase(); - db.delete(TABLE_SENSOR_DATA, null, null); - db.close(); + public void clearAllData() { // 清空所有数据 + SQLiteDatabase db = this.getWritableDatabase(); // 获取可写数据库 + db.delete(TABLE_SENSOR_DATA, null, null); // 删除所有数据 + db.close(); // 关闭数据库 } /** * 从Cursor创建SensorData对象 */ - private SensorData createSensorDataFromCursor(Cursor cursor) { - SensorData data = new SensorData(); - data.setId(cursor.getLong(cursor.getColumnIndex(COLUMN_ID))); - data.setTimestamp(cursor.getString(cursor.getColumnIndex(COLUMN_TIMESTAMP))); - data.setTemperature(cursor.getInt(cursor.getColumnIndex(COLUMN_TEMPERATURE))); - data.setHumidity(cursor.getInt(cursor.getColumnIndex(COLUMN_HUMIDITY))); - data.setLight(cursor.getInt(cursor.getColumnIndex(COLUMN_LIGHT))); - data.setDistance(cursor.getInt(cursor.getColumnIndex(COLUMN_DISTANCE))); - data.setTimeMinutes(cursor.getInt(cursor.getColumnIndex(COLUMN_TIME_MINUTES))); - data.setMode(cursor.getString(cursor.getColumnIndex(COLUMN_MODE))); + private SensorData createSensorDataFromCursor(Cursor cursor) { // 从Cursor创建SensorData对象 + SensorData data = new SensorData(); // 创建SensorData对象 + data.setId(cursor.getLong(cursor.getColumnIndex(COLUMN_ID))); // 设置ID + data.setTimestamp(cursor.getString(cursor.getColumnIndex(COLUMN_TIMESTAMP))); // 设置时间戳 + data.setTemperature(cursor.getInt(cursor.getColumnIndex(COLUMN_TEMPERATURE))); // 设置温度 + data.setHumidity(cursor.getInt(cursor.getColumnIndex(COLUMN_HUMIDITY))); // 设置湿度 + data.setLight(cursor.getInt(cursor.getColumnIndex(COLUMN_LIGHT))); // 设置光照 + data.setDistance(cursor.getInt(cursor.getColumnIndex(COLUMN_DISTANCE))); // 设置距离 + data.setTimeMinutes(cursor.getInt(cursor.getColumnIndex(COLUMN_TIME_MINUTES))); // 设置时间(分钟) + data.setMode(cursor.getString(cursor.getColumnIndex(COLUMN_MODE))); // 设置模式 // 处理新增字段(兼容旧数据) - int triggeredColumnIndex = cursor.getColumnIndex(COLUMN_IS_TRIGGERED); - if (triggeredColumnIndex >= 0) { - data.setTriggered(cursor.getInt(triggeredColumnIndex) == 1); + int triggeredColumnIndex = cursor.getColumnIndex(COLUMN_IS_TRIGGERED); // 获取触发状态列索引 + if (triggeredColumnIndex >= 0) { // 如果触发状态列存在 + data.setTriggered(cursor.getInt(triggeredColumnIndex) == 1); // 设置触发状态 } else { - data.setTriggered(false); + data.setTriggered(false); // 设置触发状态 } - int conditionsColumnIndex = cursor.getColumnIndex(COLUMN_TRIGGER_CONDITIONS); - if (conditionsColumnIndex >= 0) { - data.setTriggerConditions(cursor.getString(conditionsColumnIndex)); + int conditionsColumnIndex = cursor.getColumnIndex(COLUMN_TRIGGER_CONDITIONS); // 获取触发条件列索引 + if (conditionsColumnIndex >= 0) { // 如果触发条件列存在 + data.setTriggerConditions(cursor.getString(conditionsColumnIndex)); // 设置触发条件 } else { - data.setTriggerConditions(""); + data.setTriggerConditions(""); // 设置触发条件 } - return data; + return data; // 返回SensorData对象 } /** * 获取当前时间戳 */ - private String getCurrentTimestamp() { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); - return sdf.format(new Date()); + private String getCurrentTimestamp() { // 获取当前时间戳 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); // 创建SimpleDateFormat对象 + return sdf.format(new Date()); // 返回当前时间戳 } /** * 获取数据库记录总数 */ - public int getRecordCount() { - SQLiteDatabase db = this.getReadableDatabase(); - Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM " + TABLE_SENSOR_DATA, null); - int count = 0; - if (cursor.moveToFirst()) { - count = cursor.getInt(0); + public int getRecordCount() { // 获取数据库记录总数 + SQLiteDatabase db = this.getReadableDatabase(); // 获取可读数据库 + Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM " + TABLE_SENSOR_DATA, null); // 执行查询 + int count = 0; // 记录总数 + if (cursor.moveToFirst()) { // 如果游标移动到第一行 + count = cursor.getInt(0); // 设置记录总数 } - cursor.close(); - db.close(); - return count; + cursor.close(); // 关闭游标 + db.close(); // 关闭数据库 + return count; // 返回记录总数 } // ========== 预设方案管理方法 ========== @@ -416,163 +416,163 @@ public class DatabaseHelper extends SQLiteOpenHelper { /** * 插入默认预设方案 */ - private void insertDefaultPresets(SQLiteDatabase db) { - ContentValues values = new ContentValues(); + private void insertDefaultPresets(SQLiteDatabase db) { // 插入默认预设方案 + ContentValues values = new ContentValues(); // 创建ContentValues对象 // 默认方案1:普通检测 - values.put(COLUMN_PRESET_NAME, "普通检测"); - values.put(COLUMN_PRESET_DESCRIPTION, "适用于一般环境的检测设置"); - values.put(COLUMN_PRESET_TEMP_THRESHOLD, 45); - values.put(COLUMN_PRESET_HUMI_THRESHOLD, 35); - values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, 10); - values.put(COLUMN_PRESET_LIGHT_THRESHOLD, 70); - values.put(COLUMN_PRESET_RECORD_INTERVAL, 1000); - values.put(COLUMN_PRESET_AUTO_RECORD, 1); - values.put(COLUMN_PRESET_CREATED_TIME, getCurrentTimestamp()); - values.put(COLUMN_PRESET_IS_DEFAULT, 1); - db.insert(TABLE_PRESET_SCHEMES, null, values); + values.put(COLUMN_PRESET_NAME, "普通检测"); // 设置预设方案名称 + values.put(COLUMN_PRESET_DESCRIPTION, "适用于一般环境的检测设置"); // 设置预设方案描述 + values.put(COLUMN_PRESET_TEMP_THRESHOLD, 45); // 设置温度阈值 + values.put(COLUMN_PRESET_HUMI_THRESHOLD, 35); // 设置湿度阈值 + values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, 10); // 设置距离阈值 + values.put(COLUMN_PRESET_LIGHT_THRESHOLD, 70); // 设置光照阈值 + values.put(COLUMN_PRESET_RECORD_INTERVAL, 1000); // 设置记录间隔 + values.put(COLUMN_PRESET_AUTO_RECORD, 1); // 设置自动记录 + values.put(COLUMN_PRESET_CREATED_TIME, getCurrentTimestamp()); // 设置创建时间 + values.put(COLUMN_PRESET_IS_DEFAULT, 1); // 设置是否默认 + db.insert(TABLE_PRESET_SCHEMES, null, values); // 插入数据 // 默认方案2:高精度检测 - values.clear(); - values.put(COLUMN_PRESET_NAME, "高精度检测"); - values.put(COLUMN_PRESET_DESCRIPTION, "高频率记录,适用于精密监控"); - values.put(COLUMN_PRESET_TEMP_THRESHOLD, 40); - values.put(COLUMN_PRESET_HUMI_THRESHOLD, 30); - values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, 5); - values.put(COLUMN_PRESET_LIGHT_THRESHOLD, 80); - values.put(COLUMN_PRESET_RECORD_INTERVAL, 500); - values.put(COLUMN_PRESET_AUTO_RECORD, 1); - values.put(COLUMN_PRESET_CREATED_TIME, getCurrentTimestamp()); - values.put(COLUMN_PRESET_IS_DEFAULT, 1); - db.insert(TABLE_PRESET_SCHEMES, null, values); + values.clear(); // 清空ContentValues对象 + values.put(COLUMN_PRESET_NAME, "高精度检测"); // 设置预设方案名称 + values.put(COLUMN_PRESET_DESCRIPTION, "高频率记录,适用于精密监控"); // 设置预设方案描述 + values.put(COLUMN_PRESET_TEMP_THRESHOLD, 40); // 设置温度阈值 + values.put(COLUMN_PRESET_HUMI_THRESHOLD, 30); // 设置湿度阈值 + values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, 5); // 设置距离阈值 + values.put(COLUMN_PRESET_LIGHT_THRESHOLD, 80); // 设置光照阈值 + values.put(COLUMN_PRESET_RECORD_INTERVAL, 500); // 设置记录间隔 + values.put(COLUMN_PRESET_AUTO_RECORD, 1); // 设置自动记录 + values.put(COLUMN_PRESET_CREATED_TIME, getCurrentTimestamp()); // 设置创建时间 + values.put(COLUMN_PRESET_IS_DEFAULT, 1); // 设置是否默认 + db.insert(TABLE_PRESET_SCHEMES, null, values); // 插入数据 // 默认方案3:节能检测 - values.clear(); - values.put(COLUMN_PRESET_NAME, "节能检测"); - values.put(COLUMN_PRESET_DESCRIPTION, "低频率记录,适用于长期监控"); - values.put(COLUMN_PRESET_TEMP_THRESHOLD, 50); - values.put(COLUMN_PRESET_HUMI_THRESHOLD, 40); - values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, 15); - values.put(COLUMN_PRESET_LIGHT_THRESHOLD, 60); - values.put(COLUMN_PRESET_RECORD_INTERVAL, 5000); - values.put(COLUMN_PRESET_AUTO_RECORD, 1); - values.put(COLUMN_PRESET_CREATED_TIME, getCurrentTimestamp()); - values.put(COLUMN_PRESET_IS_DEFAULT, 1); - db.insert(TABLE_PRESET_SCHEMES, null, values); + values.clear(); // 清空ContentValues对象 + values.put(COLUMN_PRESET_NAME, "节能检测"); // 设置预设方案名称 + values.put(COLUMN_PRESET_DESCRIPTION, "低频率记录,适用于长期监控"); // 设置预设方案描述 + values.put(COLUMN_PRESET_TEMP_THRESHOLD, 50); // 设置温度阈值 + values.put(COLUMN_PRESET_HUMI_THRESHOLD, 40); // 设置湿度阈值 + values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, 15); // 设置距离阈值 + values.put(COLUMN_PRESET_LIGHT_THRESHOLD, 60); // 设置光照阈值 + values.put(COLUMN_PRESET_RECORD_INTERVAL, 5000); // 设置记录间隔 + values.put(COLUMN_PRESET_AUTO_RECORD, 1); // 设置自动记录 + values.put(COLUMN_PRESET_CREATED_TIME, getCurrentTimestamp()); // 设置创建时间 + values.put(COLUMN_PRESET_IS_DEFAULT, 1); // 设置是否默认 + db.insert(TABLE_PRESET_SCHEMES, null, values); // 插入数据 } /** * 获取所有预设方案 */ - public List getAllPresetSchemes() { - List schemes = new ArrayList<>(); - String selectQuery = "SELECT * FROM " + TABLE_PRESET_SCHEMES + " ORDER BY " + COLUMN_PRESET_IS_DEFAULT + " DESC, " + COLUMN_PRESET_CREATED_TIME + " DESC"; + public List getAllPresetSchemes() { // 获取所有预设方案 + List schemes = new ArrayList<>(); // 创建PresetScheme列表 + String selectQuery = "SELECT * FROM " + TABLE_PRESET_SCHEMES + " ORDER BY " + COLUMN_PRESET_IS_DEFAULT + " DESC, " + COLUMN_PRESET_CREATED_TIME + " DESC"; // 创建查询语句 - SQLiteDatabase db = this.getReadableDatabase(); - Cursor cursor = db.rawQuery(selectQuery, null); + SQLiteDatabase db = this.getReadableDatabase(); // 获取可读数据库 + Cursor cursor = db.rawQuery(selectQuery, null); // 执行查询 if (cursor.moveToFirst()) { do { - PresetScheme scheme = createPresetSchemeFromCursor(cursor); - schemes.add(scheme); - } while (cursor.moveToNext()); + PresetScheme scheme = createPresetSchemeFromCursor(cursor); // 创建PresetScheme对象 + schemes.add(scheme); // 添加到列表 + } while (cursor.moveToNext()); // 移动到下一行 } - cursor.close(); - db.close(); - return schemes; + cursor.close(); // 关闭游标 + db.close(); // 关闭数据库 + return schemes; // 返回预设方案列表 } /** * 添加预设方案 */ public long addPresetScheme(String name, String description, int tempThreshold, int humiThreshold, - int distanceThreshold, int lightThreshold, int recordInterval, boolean autoRecord) { - SQLiteDatabase db = this.getWritableDatabase(); - - ContentValues values = new ContentValues(); - values.put(COLUMN_PRESET_NAME, name); - values.put(COLUMN_PRESET_DESCRIPTION, description); - values.put(COLUMN_PRESET_TEMP_THRESHOLD, tempThreshold); - values.put(COLUMN_PRESET_HUMI_THRESHOLD, humiThreshold); - values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, distanceThreshold); - values.put(COLUMN_PRESET_LIGHT_THRESHOLD, lightThreshold); - values.put(COLUMN_PRESET_RECORD_INTERVAL, recordInterval); - values.put(COLUMN_PRESET_AUTO_RECORD, autoRecord ? 1 : 0); - values.put(COLUMN_PRESET_CREATED_TIME, getCurrentTimestamp()); - values.put(COLUMN_PRESET_IS_DEFAULT, 0); - - long id = db.insert(TABLE_PRESET_SCHEMES, null, values); - db.close(); - return id; + int distanceThreshold, int lightThreshold, int recordInterval, boolean autoRecord) { // 添加预设方案 + SQLiteDatabase db = this.getWritableDatabase(); // 获取可写数据库 + + ContentValues values = new ContentValues(); // 创建ContentValues对象 + values.put(COLUMN_PRESET_NAME, name); // 设置预设方案名称 + values.put(COLUMN_PRESET_DESCRIPTION, description); // 设置预设方案描述 + values.put(COLUMN_PRESET_TEMP_THRESHOLD, tempThreshold); // 设置温度阈值 + values.put(COLUMN_PRESET_HUMI_THRESHOLD, humiThreshold); // 设置湿度阈值 + values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, distanceThreshold); // 设置距离阈值 + values.put(COLUMN_PRESET_LIGHT_THRESHOLD, lightThreshold); // 设置光照阈值 + values.put(COLUMN_PRESET_RECORD_INTERVAL, recordInterval); // 设置记录间隔 + values.put(COLUMN_PRESET_AUTO_RECORD, autoRecord ? 1 : 0); // 设置自动记录 + values.put(COLUMN_PRESET_CREATED_TIME, getCurrentTimestamp()); // 设置创建时间 + values.put(COLUMN_PRESET_IS_DEFAULT, 0); // 设置是否默认 + + long id = db.insert(TABLE_PRESET_SCHEMES, null, values); // 插入数据 + db.close(); // 关闭数据库 + return id; // 返回ID } /** * 更新预设方案 */ public int updatePresetScheme(long id, String name, String description, int tempThreshold, int humiThreshold, - int distanceThreshold, int lightThreshold, int recordInterval, boolean autoRecord) { - SQLiteDatabase db = this.getWritableDatabase(); - - ContentValues values = new ContentValues(); - values.put(COLUMN_PRESET_NAME, name); - values.put(COLUMN_PRESET_DESCRIPTION, description); - values.put(COLUMN_PRESET_TEMP_THRESHOLD, tempThreshold); - values.put(COLUMN_PRESET_HUMI_THRESHOLD, humiThreshold); - values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, distanceThreshold); - values.put(COLUMN_PRESET_LIGHT_THRESHOLD, lightThreshold); - values.put(COLUMN_PRESET_RECORD_INTERVAL, recordInterval); - values.put(COLUMN_PRESET_AUTO_RECORD, autoRecord ? 1 : 0); - - int rowsAffected = db.update(TABLE_PRESET_SCHEMES, values, COLUMN_PRESET_ID + " = ?", new String[]{String.valueOf(id)}); - db.close(); - return rowsAffected; + int distanceThreshold, int lightThreshold, int recordInterval, boolean autoRecord) { // 更新预设方案 + SQLiteDatabase db = this.getWritableDatabase(); // 获取可写数据库 + + ContentValues values = new ContentValues(); // 创建ContentValues对象 + values.put(COLUMN_PRESET_NAME, name); // 设置预设方案名称 + values.put(COLUMN_PRESET_DESCRIPTION, description); // 设置预设方案描述 + values.put(COLUMN_PRESET_TEMP_THRESHOLD, tempThreshold); // 设置温度阈值 + values.put(COLUMN_PRESET_HUMI_THRESHOLD, humiThreshold); // 设置湿度阈值 + values.put(COLUMN_PRESET_DISTANCE_THRESHOLD, distanceThreshold); // 设置距离阈值 + values.put(COLUMN_PRESET_LIGHT_THRESHOLD, lightThreshold); // 设置光照阈值 + values.put(COLUMN_PRESET_RECORD_INTERVAL, recordInterval); // 设置记录间隔 + values.put(COLUMN_PRESET_AUTO_RECORD, autoRecord ? 1 : 0); // 设置自动记录 + + int rowsAffected = db.update(TABLE_PRESET_SCHEMES, values, COLUMN_PRESET_ID + " = ?", new String[]{String.valueOf(id)}); // 更新数据 + db.close(); // 关闭数据库 + return rowsAffected; // 返回受影响的行数 } /** * 删除预设方案(不能删除默认方案) */ - public int deletePresetScheme(long id) { - SQLiteDatabase db = this.getWritableDatabase(); - int rowsAffected = db.delete(TABLE_PRESET_SCHEMES, COLUMN_PRESET_ID + " = ? AND " + COLUMN_PRESET_IS_DEFAULT + " = 0", new String[]{String.valueOf(id)}); - db.close(); - return rowsAffected; + public int deletePresetScheme(long id) { // 删除预设方案 + SQLiteDatabase db = this.getWritableDatabase(); // 获取可写数据库 + int rowsAffected = db.delete(TABLE_PRESET_SCHEMES, COLUMN_PRESET_ID + " = ? AND " + COLUMN_PRESET_IS_DEFAULT + " = 0", new String[]{String.valueOf(id)}); // 删除数据 + db.close(); // 关闭数据库 + return rowsAffected; // 返回受影响的行数 } /** * 根据ID获取预设方案 */ - public PresetScheme getPresetSchemeById(long id) { - SQLiteDatabase db = this.getReadableDatabase(); + public PresetScheme getPresetSchemeById(long id) { // 根据ID获取预设方案 + SQLiteDatabase db = this.getReadableDatabase(); // 获取可读数据库 Cursor cursor = db.query(TABLE_PRESET_SCHEMES, null, COLUMN_PRESET_ID + " = ?", - new String[]{String.valueOf(id)}, null, null, null); + new String[]{String.valueOf(id)}, null, null, null); // 执行查询 - PresetScheme scheme = null; - if (cursor.moveToFirst()) { - scheme = createPresetSchemeFromCursor(cursor); + PresetScheme scheme = null; // 创建PresetScheme对象 + if (cursor.moveToFirst()) { // 如果游标移动到第一行 + scheme = createPresetSchemeFromCursor(cursor); // 创建PresetScheme对象 } - cursor.close(); - db.close(); - return scheme; + cursor.close(); // 关闭游标 + db.close(); // 关闭数据库 + return scheme; // 返回PresetScheme对象 } /** * 从Cursor创建PresetScheme对象 */ - private PresetScheme createPresetSchemeFromCursor(Cursor cursor) { - PresetScheme scheme = new PresetScheme(); - scheme.setId(cursor.getLong(cursor.getColumnIndex(COLUMN_PRESET_ID))); - scheme.setName(cursor.getString(cursor.getColumnIndex(COLUMN_PRESET_NAME))); - scheme.setDescription(cursor.getString(cursor.getColumnIndex(COLUMN_PRESET_DESCRIPTION))); - scheme.setTempThreshold(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_TEMP_THRESHOLD))); - scheme.setHumiThreshold(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_HUMI_THRESHOLD))); - scheme.setDistanceThreshold(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_DISTANCE_THRESHOLD))); - scheme.setLightThreshold(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_LIGHT_THRESHOLD))); - scheme.setRecordInterval(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_RECORD_INTERVAL))); - scheme.setAutoRecord(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_AUTO_RECORD)) == 1); - scheme.setCreatedTime(cursor.getString(cursor.getColumnIndex(COLUMN_PRESET_CREATED_TIME))); - scheme.setIsDefault(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_IS_DEFAULT)) == 1); - return scheme; + private PresetScheme createPresetSchemeFromCursor(Cursor cursor) { // 从Cursor创建PresetScheme对象 + PresetScheme scheme = new PresetScheme(); // 创建PresetScheme对象 + scheme.setId(cursor.getLong(cursor.getColumnIndex(COLUMN_PRESET_ID))); // 设置ID + scheme.setName(cursor.getString(cursor.getColumnIndex(COLUMN_PRESET_NAME))); // 设置名称 + scheme.setDescription(cursor.getString(cursor.getColumnIndex(COLUMN_PRESET_DESCRIPTION))); // 设置描述 + scheme.setTempThreshold(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_TEMP_THRESHOLD))); // 设置温度阈值 + scheme.setHumiThreshold(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_HUMI_THRESHOLD))); // 设置湿度阈值 + scheme.setDistanceThreshold(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_DISTANCE_THRESHOLD))); // 设置距离阈值 + scheme.setLightThreshold(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_LIGHT_THRESHOLD))); // 设置光照阈值 + scheme.setRecordInterval(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_RECORD_INTERVAL))); // 设置记录间隔 + scheme.setAutoRecord(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_AUTO_RECORD)) == 1); // 设置自动记录 + scheme.setCreatedTime(cursor.getString(cursor.getColumnIndex(COLUMN_PRESET_CREATED_TIME))); // 设置创建时间 + scheme.setIsDefault(cursor.getInt(cursor.getColumnIndex(COLUMN_PRESET_IS_DEFAULT)) == 1); // 设置是否默认 + return scheme; // 返回PresetScheme对象 } } \ No newline at end of file diff --git a/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Models/DataStatistics.java b/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Models/DataStatistics.java index aefcdcd..b60df1d 100644 --- a/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Models/DataStatistics.java +++ b/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Models/DataStatistics.java @@ -3,110 +3,110 @@ package com.test.Bluetooh_736_2.Models; /** * 数据统计模型类 */ -public class DataStatistics { - private int totalRecords; +public class DataStatistics { // 数据统计模型类 + private int totalRecords; // 总记录数 // 温度统计 - private int minTemperature; - private int maxTemperature; - private float avgTemperature; + private int minTemperature; // 最小温度 + private int maxTemperature; // 最大温度 + private float avgTemperature; // 平均温度 // 湿度统计 - private int minHumidity; - private int maxHumidity; - private float avgHumidity; + private int minHumidity; // 最小湿度 + private int maxHumidity; // 最大湿度 + private float avgHumidity; // 平均湿度 // 光照统计 - private int minLight; - private int maxLight; - private float avgLight; + private int minLight; // 最小光照 + private int maxLight; // 最大光照 + private float avgLight; // 平均光照 // 构造函数 - public DataStatistics() {} + public DataStatistics() {} // 构造函数 // Getter 和 Setter 方法 - public int getTotalRecords() { - return totalRecords; + public int getTotalRecords() { // 获取总记录数 + return totalRecords; // 返回总记录数 } - public void setTotalRecords(int totalRecords) { - this.totalRecords = totalRecords; + public void setTotalRecords(int totalRecords) { // 设置总记录数 + this.totalRecords = totalRecords; // 设置总记录数 } - public int getMinTemperature() { - return minTemperature; + public int getMinTemperature() { // 获取最小温度 + return minTemperature; // 返回最小温度 } - public void setMinTemperature(int minTemperature) { - this.minTemperature = minTemperature; + public void setMinTemperature(int minTemperature) { // 设置最小温度 + this.minTemperature = minTemperature; // 设置最小温度 } - public int getMaxTemperature() { - return maxTemperature; + public int getMaxTemperature() { // 获取最大温度 + return maxTemperature; // 返回最大温度 } - public void setMaxTemperature(int maxTemperature) { - this.maxTemperature = maxTemperature; + public void setMaxTemperature(int maxTemperature) { // 设置最大温度 + this.maxTemperature = maxTemperature; // 设置最大温度 } - public float getAvgTemperature() { - return avgTemperature; + public float getAvgTemperature() { // 获取平均温度 + return avgTemperature; // 返回平均温度 } - public void setAvgTemperature(float avgTemperature) { - this.avgTemperature = avgTemperature; + public void setAvgTemperature(float avgTemperature) { // 设置平均温度 + this.avgTemperature = avgTemperature; // 设置平均温度 } - public int getMinHumidity() { - return minHumidity; + public int getMinHumidity() { // 获取最小湿度 + return minHumidity; // 返回最小湿度 } - public void setMinHumidity(int minHumidity) { - this.minHumidity = minHumidity; + public void setMinHumidity(int minHumidity) { // 设置最小湿度 + this.minHumidity = minHumidity; // 设置最小湿度 } - public int getMaxHumidity() { - return maxHumidity; + public int getMaxHumidity() { // 获取最大湿度 + return maxHumidity; // 返回最大湿度 } - public void setMaxHumidity(int maxHumidity) { - this.maxHumidity = maxHumidity; + public void setMaxHumidity(int maxHumidity) { // 设置最大湿度 + this.maxHumidity = maxHumidity; // 设置最大湿度 } - public float getAvgHumidity() { + public float getAvgHumidity() { // 获取平均湿度 return avgHumidity; } public void setAvgHumidity(float avgHumidity) { - this.avgHumidity = avgHumidity; + this.avgHumidity = avgHumidity; // 设置平均湿度 } - public int getMinLight() { - return minLight; + public int getMinLight() { // 获取最小光照 + return minLight; // 返回最小光照 } - public void setMinLight(int minLight) { - this.minLight = minLight; + public void setMinLight(int minLight) { // 设置最小光照 + this.minLight = minLight; // 设置最小光照 } - public int getMaxLight() { - return maxLight; + public int getMaxLight() { // 获取最大光照 + return maxLight; // 返回最大光照 } - public void setMaxLight(int maxLight) { - this.maxLight = maxLight; + public void setMaxLight(int maxLight) { // 设置最大光照 + this.maxLight = maxLight; // 设置最大光照 } - public float getAvgLight() { - return avgLight; + public float getAvgLight() { // 获取平均光照 + return avgLight; // 返回平均光照 } - public void setAvgLight(float avgLight) { - this.avgLight = avgLight; + public void setAvgLight(float avgLight) { // 设置平均光照 + this.avgLight = avgLight; // 设置平均光照 } @Override - public String toString() { + public String toString() { // 重写toString方法 return "DataStatistics{" + "totalRecords=" + totalRecords + ", minTemperature=" + minTemperature + diff --git a/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Models/SensorData.java b/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Models/SensorData.java index 9a227c9..6b4e65c 100644 --- a/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Models/SensorData.java +++ b/Battlefield detection system_app/app/src/main/java/com/test/Bluetooh_736_2/Models/SensorData.java @@ -19,98 +19,98 @@ SensorData { // 构造函数 public SensorData() {} - public SensorData(int temperature, int humidity, int light, int distance, int timeMinutes, String mode) { + public SensorData(int temperature, int humidity, int light, int distance, int timeMinutes, String mode) { // 构造函数 this.temperature = temperature; this.humidity = humidity; - this.light = light; - this.distance = distance; - this.timeMinutes = timeMinutes; - this.mode = mode; + this.light = light; // 光照 + this.distance = distance; // 距离 + this.timeMinutes = timeMinutes; // 时间(分钟) + this.mode = mode; // 模式 } // Getter 和 Setter 方法 public long getId() { return id; } - - public void setId(long id) { + + public void setId(long id) { // 设置ID this.id = id; } - public String getTimestamp() { + public String getTimestamp() { // 获取时间戳 return timestamp; } - public void setTimestamp(String timestamp) { + public void setTimestamp(String timestamp) { // 设置时间戳 this.timestamp = timestamp; } - public int getTemperature() { + public int getTemperature() { // 获取温度 return temperature; } - public void setTemperature(int temperature) { + public void setTemperature(int temperature) { // 设置温度 this.temperature = temperature; } - public int getHumidity() { + public int getHumidity() { // 获取湿度 return humidity; } - public void setHumidity(int humidity) { + public void setHumidity(int humidity) { // 设置湿度 this.humidity = humidity; } - public int getLight() { + public int getLight() { // 获取光照 return light; } - public void setLight(int light) { + public void setLight(int light) { // 设置光照 this.light = light; } - public int getDistance() { + public int getDistance() { // 获取距离 return distance; } - public void setDistance(int distance) { + public void setDistance(int distance) { // 设置距离 this.distance = distance; } - public int getTimeMinutes() { + public int getTimeMinutes() { // 获取时间(分钟) return timeMinutes; } - public void setTimeMinutes(int timeMinutes) { + public void setTimeMinutes(int timeMinutes) { // 设置时间(分钟) this.timeMinutes = timeMinutes; } - public String getMode() { + public String getMode() { // 获取模式 return mode; } - public void setMode(String mode) { + public void setMode(String mode) { // 设置模式 this.mode = mode; } - public boolean isTriggered() { + public boolean isTriggered() { // 获取触发状态 return isTriggered; } - public void setTriggered(boolean triggered) { + public void setTriggered(boolean triggered) { // 设置触发状态 isTriggered = triggered; } - public String getTriggerConditions() { + public String getTriggerConditions() { // 获取触发条件 return triggerConditions; } - public void setTriggerConditions(String triggerConditions) { + public void setTriggerConditions(String triggerConditions) { // 设置触发条件 this.triggerConditions = triggerConditions; } @Override - public String toString() { + public String toString() { // 重写toString方法 return "SensorData{" + "id=" + id + ", timestamp='" + timestamp + '\'' + diff --git a/battlefield_system_package_diagram.md b/battlefield_system_package_diagram.md new file mode 100644 index 0000000..c0a2519 --- /dev/null +++ b/battlefield_system_package_diagram.md @@ -0,0 +1,43 @@ +# 战场检测系统包图 + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Activities Package │ +│ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐│ +│ │ MainActivity │ │ DeviceListActivity│ │ HistoryActivity ││ +│ └──────────────────┘ └──────────────────┘ └─────────────────┘│ +│ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐│ +│ │ SettingsActivity │ │PresetManagerActivity│ │ChartAnalysisActivity││ +│ └──────────────────┘ └──────────────────┘ └─────────────────┘│ +└─────────────────────────────────────────────────────────────────┘ + │ + │ depends on + ↓ +┌─────────────────────────────────────────────────────────────────┐ +│ Database Package │ +│ ┌──────────────────┐ │ +│ │ DatabaseHelper │ │ +│ └──────────────────┘ │ +└─────────────────────────────────────────────────────────────────┘ + │ + │ depends on + ↓ +┌─────────────────────────────────────────────────────────────────┐ +│ Models Package │ +│ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐│ +│ │ SensorData │ │ PresetScheme │ │ DataStatistics ││ +│ └──────────────────┘ └──────────────────┘ └─────────────────┘│ +└─────────────────────────────────────────────────────────────────┘ + │ + │ extends/implements + ↓ +┌─────────────────────────────────────────────────────────────────┐ +│ Android Framework │ +│ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐│ +│ │ Activity │ │ SQLiteOpenHelper │ │BluetoothAdapter ││ +│ └──────────────────┘ └──────────────────┘ └─────────────────┘│ +│ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐│ +│ │SharedPreferences │ │ Handler │ │ Vibrator ││ +│ └──────────────────┘ └──────────────────┘ └─────────────────┘│ +└─────────────────────────────────────────────────────────────────┘ +``` \ No newline at end of file