修复问题

This commit is contained in:
崔芝斌 2025-08-05 21:37:21 +08:00
parent c2f2e44c42
commit 449f796f05
5 changed files with 56 additions and 45 deletions

View File

@ -59,7 +59,6 @@ public class LoginActivity extends AppCompatActivity {
private final String AUTH_TOKEN_KEY = "auth_token"; private final String AUTH_TOKEN_KEY = "auth_token";
private static final String Name = "name"; private static final String Name = "name";
private static final String Userid = "userid"; private static final String Userid = "userid";
private static final String BASE_URL = "http://pms.dtyx.net:9158/";
private String authToken = ""; private String authToken = "";
private static final String PREFS_NAME = "LoginPrefs"; private static final String PREFS_NAME = "LoginPrefs";
private static final String PREF_USERNAME = "username"; private static final String PREF_USERNAME = "username";

View File

@ -1,5 +1,6 @@
package com.example.myapplication; package com.example.myapplication;
import android.Manifest;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.DatePickerDialog; import android.app.DatePickerDialog;
import android.app.NotificationChannel; import android.app.NotificationChannel;
@ -34,16 +35,12 @@ import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import androidx.annotation.Nullable;
import androidx.core.util.Pair;
import android.os.Looper; import android.os.Looper;
import android.provider.MediaStore; import android.provider.MediaStore;
import android.provider.Settings; import android.provider.Settings;
import android.text.TextUtils;
import android.util.Base64; import android.util.Base64;
import android.util.Log; import android.util.Log;
import android.util.SparseBooleanArray; import android.util.SparseBooleanArray;
import android.view.Gravity; import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -70,24 +67,22 @@ import android.widget.Spinner;
import android.widget.TextView; import android.widget.TextView;
import android.widget.TimePicker; import android.widget.TimePicker;
import android.widget.Toast; import android.widget.Toast;
import android.Manifest;
import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts; import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider; import androidx.core.content.FileProvider;
import androidx.core.util.Pair;
import androidx.lifecycle.ViewModelStore; import androidx.lifecycle.ViewModelStore;
import androidx.lifecycle.ViewModelStoreOwner; import androidx.lifecycle.ViewModelStoreOwner;
import androidx.room.Room; import androidx.room.Room;
import com.chaquo.python.PyException; import com.chaquo.python.PyException;
import com.chaquo.python.PyObject; import com.chaquo.python.PyObject;
import com.chaquo.python.Python; import com.chaquo.python.Python;
@ -96,10 +91,8 @@ import com.example.myapplication.DataBase.DatabaseHelper;
import com.example.myapplication.Service.FloatingWindowService; import com.example.myapplication.Service.FloatingWindowService;
import com.example.myapplication.Service.PhotoMonitoringService; import com.example.myapplication.Service.PhotoMonitoringService;
import com.example.myapplication.Service.RecordingService; import com.example.myapplication.Service.RecordingService;
import com.example.myapplication.Tool.AuthInterceptor;
import com.example.myapplication.Tool.BackgroundToast; import com.example.myapplication.Tool.BackgroundToast;
import com.example.myapplication.Tool.DynamicDataFetcher; import com.example.myapplication.Tool.DynamicDataFetcher;
import com.example.myapplication.Tool.PartListFetcher;
import com.example.myapplication.Tool.PermissionUtils; import com.example.myapplication.Tool.PermissionUtils;
import com.example.myapplication.Tool.ReportGenerator; import com.example.myapplication.Tool.ReportGenerator;
import com.example.myapplication.Tool.ReportGeneratorHelper; import com.example.myapplication.Tool.ReportGeneratorHelper;
@ -123,16 +116,11 @@ import com.google.android.material.textfield.TextInputEditText;
import org.json.JSONObject; import org.json.JSONObject;
import okhttp3.*;
import retrofit2.Retrofit;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.net.SocketTimeoutException; import java.net.SocketTimeoutException;
@ -140,7 +128,6 @@ import java.net.UnknownHostException;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Calendar; import java.util.Calendar;
@ -154,11 +141,21 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.HttpUrl;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import retrofit2.Retrofit;
// 在MainActivity类中添加以下变量 // 在MainActivity类中添加以下变量
@ -315,8 +312,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
private static final String PREF_REMEMBER = "remember"; private static final String PREF_REMEMBER = "remember";
private final String AUTH_TOKEN_KEY = "auth_token"; private final String AUTH_TOKEN_KEY = "auth_token";
private String authToken = ""; private String authToken = "";
// private final String BASE_URL = "http://10.2.1.20:8888"; private boolean init = false;
private final String BASE_URL = "http://pms.dtyx.net:9158";
@SuppressLint("UnspecifiedRegisterReceiverFlag") @SuppressLint("UnspecifiedRegisterReceiverFlag")
@Override @Override
@ -331,7 +327,6 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
dbHelper = new DatabaseHelper(MainActivity.this); dbHelper = new DatabaseHelper(MainActivity.this);
setupProjectListeners(); setupProjectListeners();
loadProjectPreferences();
// 初始化项目下拉框 // 初始化项目下拉框
initProjectDropdown(); initProjectDropdown();
initTurbineDropdown(); initTurbineDropdown();
@ -503,14 +498,16 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
partAdapter.getFilter().filter(""); partAdapter.getFilter().filter("");
} }
private void loadProjectPreferences() { private void loadProjectPreferences(List<Project> projects) {
if (init) {
return;
}
init = true;
boolean remember = sharedPreferences.getBoolean(PREF_REMEMBER, false); boolean remember = sharedPreferences.getBoolean(PREF_REMEMBER, false);
if (remember) { if (remember) {
// 项目 // 项目
String savedProject = sharedPreferences.getString(PREF_PROJECT, ""); String savedProject = sharedPreferences.getString(PREF_PROJECT, "");
actvProject.setText(savedProject);
if (!savedProject.isEmpty()) { if (!savedProject.isEmpty()) {
try { try {
int lastBracketIndex = savedProject.lastIndexOf("("); int lastBracketIndex = savedProject.lastIndexOf("(");
@ -519,7 +516,8 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
if (lastBracketIndex != -1 && closingBracketIndex != -1 && closingBracketIndex > lastBracketIndex) { if (lastBracketIndex != -1 && closingBracketIndex != -1 && closingBracketIndex > lastBracketIndex) {
projectName = savedProject.substring(0, lastBracketIndex).trim(); projectName = savedProject.substring(0, lastBracketIndex).trim();
projectId = savedProject.substring(lastBracketIndex + 1, closingBracketIndex).trim(); projectId = savedProject.substring(lastBracketIndex + 1, closingBracketIndex).trim();
dataManager.setProjectId(projectId);
actvProject.setText(projectName);
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
@ -528,8 +526,6 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
// 机组 // 机组
String savedTurbine = sharedPreferences.getString(PREF_TURBINE, ""); String savedTurbine = sharedPreferences.getString(PREF_TURBINE, "");
actvTurbine.setText(savedTurbine);
if (!savedTurbine.isEmpty()) { if (!savedTurbine.isEmpty()) {
try { try {
int lastBracketIndex = savedTurbine.lastIndexOf("("); int lastBracketIndex = savedTurbine.lastIndexOf("(");
@ -538,7 +534,9 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
if (lastBracketIndex != -1 && closingBracketIndex != -1 && closingBracketIndex > lastBracketIndex) { if (lastBracketIndex != -1 && closingBracketIndex != -1 && closingBracketIndex > lastBracketIndex) {
turbineName = savedTurbine.substring(0, lastBracketIndex).trim(); turbineName = savedTurbine.substring(0, lastBracketIndex).trim();
turbineId = savedTurbine.substring(lastBracketIndex + 1, closingBracketIndex).trim(); turbineId = savedTurbine.substring(lastBracketIndex + 1, closingBracketIndex).trim();
dataManager.setTurbineId(turbineId);
dataManager.setTurbineName(turbineName);
actvTurbine.setText(turbineName);
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
@ -547,8 +545,6 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
// 部件 // 部件
String savedPart = sharedPreferences.getString(PREF_PART, ""); String savedPart = sharedPreferences.getString(PREF_PART, "");
actvPart.setText(savedPart);
if (!savedPart.isEmpty()) { if (!savedPart.isEmpty()) {
try { try {
int lastBracketIndex = savedPart.lastIndexOf("("); int lastBracketIndex = savedPart.lastIndexOf("(");
@ -557,7 +553,9 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
if (lastBracketIndex != -1 && closingBracketIndex != -1 && closingBracketIndex > lastBracketIndex) { if (lastBracketIndex != -1 && closingBracketIndex != -1 && closingBracketIndex > lastBracketIndex) {
partName = savedPart.substring(0, lastBracketIndex).trim(); partName = savedPart.substring(0, lastBracketIndex).trim();
partId = savedPart.substring(lastBracketIndex + 1, closingBracketIndex).trim(); partId = savedPart.substring(lastBracketIndex + 1, closingBracketIndex).trim();
dataManager.setPartId(partId);
dataManager.setPartName(partName);
actvPart.setText(partName);
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
@ -684,7 +682,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
projectName = selectedProject.getProjectName(); projectName = selectedProject.getProjectName();
projectId = selectedProject.getProjectId(); projectId = selectedProject.getProjectId();
actvProject.setText(projectName); actvProject.setText(projectName);
sharedPreferences.edit().putString(PREF_PROJECT, projectName).apply(); sharedPreferences.edit().putString(PREF_PROJECT, projectName + "(" + projectId + ")").apply();
dataManager.setProjectId(projectId); dataManager.setProjectId(projectId);
loadTurbines(); loadTurbines();
} else { } else {
@ -761,7 +759,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
turbineName = selectedTurbine.getTurbineName(); turbineName = selectedTurbine.getTurbineName();
turbineId = selectedTurbine.getTurbineId(); turbineId = selectedTurbine.getTurbineId();
actvTurbine.setText(turbineName); actvTurbine.setText(turbineName);
sharedPreferences.edit().putString(PREF_TURBINE, turbineName).apply(); sharedPreferences.edit().putString(PREF_TURBINE, turbineName + "(" + turbineId + ")").apply();
dataManager.setTurbineId(turbineId); dataManager.setTurbineId(turbineId);
dataManager.setTurbineName(turbineName); dataManager.setTurbineName(turbineName);
loadParts(); loadParts();
@ -840,7 +838,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
partName = selectedPart.getPartName(); partName = selectedPart.getPartName();
partId = selectedPart.getPartId(); partId = selectedPart.getPartId();
actvPart.setText(partName); actvPart.setText(partName);
sharedPreferences.edit().putString(PREF_PART, partName).apply(); sharedPreferences.edit().putString(PREF_PART, partName + "(" + partId + ")").apply();
dataManager.setPartId(partId); dataManager.setPartId(partId);
dataManager.setPartName(partName); dataManager.setPartName(partName);
} else { } else {
@ -858,6 +856,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
public void onResponse(retrofit2.Call<ApiResponse<List<Project>>> call, retrofit2.Response<ApiResponse<List<Project>>> response) { public void onResponse(retrofit2.Call<ApiResponse<List<Project>>> call, retrofit2.Response<ApiResponse<List<Project>>> response) {
if (response.isSuccessful() && response.body() != null) { if (response.isSuccessful() && response.body() != null) {
handleSuccessProjectResponse(response.body().getData()); handleSuccessProjectResponse(response.body().getData());
loadProjectPreferences(response.body().getData());
} else { } else {
handleApiError(response); handleApiError(response);
loadCachedProjects(); loadCachedProjects();
@ -929,6 +928,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
} }
}); });
} }
private void handleSuccessTurbineResponse(List<Turbine> turbines) { private void handleSuccessTurbineResponse(List<Turbine> turbines) {
runOnUiThread(() -> { runOnUiThread(() -> {
try { try {
@ -941,6 +941,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
} }
}); });
} }
private void handleSuccessPartResponse(List<PartResponse> parts) { private void handleSuccessPartResponse(List<PartResponse> parts) {
runOnUiThread(() -> { runOnUiThread(() -> {
try { try {
@ -2963,7 +2964,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
.build(); .build();
Request request = new Request.Builder() Request request = new Request.Builder()
.url(BASE_URL + "/video-file-info/batch-upload") .url(RetrofitClient.BASE_URL + "/video-file-info/batch-upload")
.addHeader("Authorization", authToken)// 修改为您的视频上传URL .addHeader("Authorization", authToken)// 修改为您的视频上传URL
.post(requestBody) .post(requestBody)
.build(); .build();
@ -3570,9 +3571,9 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
// 未设置部件id时调用批量上传项目文件的接口 // 未设置部件id时调用批量上传项目文件的接口
HttpUrl httpUrl = null; HttpUrl httpUrl = null;
if (partId.isEmpty()) { if (partId.isEmpty()) {
httpUrl = HttpUrl.parse(BASE_URL + "/image/" + project + "/" + imageSource + "/upload-batch"); httpUrl = HttpUrl.parse(RetrofitClient.BASE_URL + "/image/" + project + "/" + imageSource + "/upload-batch");
} else { } else {
httpUrl = HttpUrl.parse(BASE_URL + "/image/" + imageSource + "/upload-batch/" + partId); httpUrl = HttpUrl.parse(RetrofitClient.BASE_URL + "/image/" + imageSource + "/upload-batch/" + partId);
} }
// 构建请求URL // 构建请求URL
HttpUrl.Builder urlBuilder = httpUrl HttpUrl.Builder urlBuilder = httpUrl
@ -4521,7 +4522,7 @@ public class MainActivity extends AppCompatActivity implements ViewModelStoreOwn
// 4. 构建请求 // 4. 构建请求
Request.Builder requestBuilder = new Request.Builder() Request.Builder requestBuilder = new Request.Builder()
.url(BASE_URL + "/audio/upload/" + imageId) .url(RetrofitClient.BASE_URL + "/audio/upload/" + imageId)
.post(requestBody); .post(requestBody);
if (token != null && !token.isEmpty()) { if (token != null && !token.isEmpty()) {

View File

@ -30,6 +30,7 @@ import com.example.myapplication.DataBase.AppDatabase;
import com.example.myapplication.R; import com.example.myapplication.R;
import com.example.myapplication.Tool.BackgroundToast; import com.example.myapplication.Tool.BackgroundToast;
import com.example.myapplication.Tool.NotificationReceiver; import com.example.myapplication.Tool.NotificationReceiver;
import com.example.myapplication.Tool.RetrofitClient;
import com.example.myapplication.model.ImageEntity; import com.example.myapplication.model.ImageEntity;
import com.example.myapplication.model.SharedDataManager; import com.example.myapplication.model.SharedDataManager;
@ -271,7 +272,7 @@ public class PhotoMonitoringService extends Service implements SharedDataManager
synchronized (uploadLock) { synchronized (uploadLock) {
for (ImageEntity image : history) { for (ImageEntity image : history) {
uploadPhoto(image.path, image.time, lastKnownLocation, image.user, uploadPhoto(image.path, image.time, lastKnownLocation, image.user,
image.audioPath, image.project, image.partId, image.turbineId, image.audioPath, image.project, image.turbineId, image.partId,
image.imageSource); image.imageSource);
} }
} }
@ -378,7 +379,7 @@ public class PhotoMonitoringService extends Service implements SharedDataManager
db2.imageDao().deleteAll(); db2.imageDao().deleteAll();
uploadPhoto(path, time, lastKnownLocation, user, uploadPhoto(path, time, lastKnownLocation, user,
audioPath, projectId, partId, turbineId, partId); audioPath, projectId, turbineId, partId, ChooseImageSource);
}); });
} }
@ -415,8 +416,15 @@ public class PhotoMonitoringService extends Service implements SharedDataManager
double longitude = location != null ? location.getLongitude() : 0; double longitude = location != null ? location.getLongitude() : 0;
double altitude = location != null ? location.getAltitude() : 0; double altitude = location != null ? location.getAltitude() : 0;
// 未设置部件id时调用批量上传项目文件的接口
HttpUrl httpUrl = null;
if (partId.isEmpty()) {
httpUrl = HttpUrl.parse(RetrofitClient.BASE_URL + "image/" + project + "/" + imageSource + "/upload");
} else {
httpUrl = HttpUrl.parse(RetrofitClient.BASE_URL + "image/" + imageSource + "/upload/" + partId);
}
// 构建请求URL // 构建请求URL
HttpUrl.Builder urlBuilder = HttpUrl.parse("http://pms.dtyx.net:9158/image/" + imageSource + "/upload/" + partId) HttpUrl.Builder urlBuilder = httpUrl
.newBuilder() .newBuilder()
.addQueryParameter("collectorId",UserId) .addQueryParameter("collectorId",UserId)
.addQueryParameter("collectorName", user) .addQueryParameter("collectorName", user)

View File

@ -30,6 +30,7 @@ import com.example.myapplication.DataBase.AppDatabase;
import com.example.myapplication.R; import com.example.myapplication.R;
import com.example.myapplication.Tool.BackgroundToast; import com.example.myapplication.Tool.BackgroundToast;
import com.example.myapplication.Tool.RetrofitClient;
import com.example.myapplication.model.AudioEntity; import com.example.myapplication.model.AudioEntity;
import com.example.myapplication.model.SharedDataManager; import com.example.myapplication.model.SharedDataManager;
@ -282,7 +283,7 @@ public class RecordingService extends Service implements SharedDataManager.DataC
// 4. 构建请求 // 4. 构建请求
Request.Builder requestBuilder = new Request.Builder() Request.Builder requestBuilder = new Request.Builder()
.url("http://pms.dtyx.net:9158/audio/upload/" + imageId) .url(RetrofitClient.BASE_URL + "audio/upload/" + imageId)
.post(requestBody); .post(requestBody);
if (token != null && !token.isEmpty()) { if (token != null && !token.isEmpty()) {

View File

@ -7,7 +7,9 @@ import retrofit2.converter.gson.GsonConverterFactory;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
public class RetrofitClient { public class RetrofitClient {
private static final String BASE_URL = "http://pms.dtyx.net:9158/"; // public static final String BASE_URL = "http://10.2.1.20:8888/";
public static final String BASE_URL = "http://pms.dtyx.net:9158/";
private static Retrofit retrofit; private static Retrofit retrofit;
public static Retrofit getClient(String authToken) { public static Retrofit getClient(String authToken) {