修复问题

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 static final String Name = "name";
private static final String Userid = "userid";
private static final String BASE_URL = "http://pms.dtyx.net:9158/";
private String authToken = "";
private static final String PREFS_NAME = "LoginPrefs";
private static final String PREF_USERNAME = "username";

View File

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

View File

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

View File

@ -7,7 +7,9 @@ import retrofit2.converter.gson.GsonConverterFactory;
import java.util.concurrent.TimeUnit;
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;
public static Retrofit getClient(String authToken) {