|
|
@@ -3,6 +3,9 @@ package com.paul.drone.repository;
|
|
|
import android.content.Context;
|
|
|
import android.util.Log;
|
|
|
|
|
|
+import androidx.annotation.OptIn;
|
|
|
+import androidx.media3.common.util.UnstableApi;
|
|
|
+
|
|
|
import com.paul.drone.data.OAuth2TokenResponse;
|
|
|
import com.paul.drone.data.RefreshTokenResponse;
|
|
|
import com.paul.drone.data.RegisterRequest;
|
|
|
@@ -12,6 +15,7 @@ import com.paul.drone.network.ChinaTowerApiService;
|
|
|
import com.paul.drone.network.SessionManager;
|
|
|
import com.paul.drone.util.AuthUtil;
|
|
|
import com.paul.drone.util.JsonUtil;
|
|
|
+import okio.Buffer;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
@@ -43,6 +47,7 @@ public class NetworkRepository {
|
|
|
private static final String BASE_URL = "http://111.22.178.69:53064";
|
|
|
private static final int NETWORK_TIMEOUT = 30000; // 30秒超时
|
|
|
|
|
|
+
|
|
|
private static volatile NetworkRepository instance;
|
|
|
private final ChinaTowerApiService chinaTowerApiService;
|
|
|
private final SessionManager sessionManager;
|
|
|
@@ -73,7 +78,7 @@ public class NetworkRepository {
|
|
|
public static NetworkRepository getInstance() {
|
|
|
if (instance == null) {
|
|
|
throw new IllegalStateException(
|
|
|
- "NetworkRepository 未初始化!请先在 Application.onCreate() 中调用 setInstance(context)"
|
|
|
+ "NetworkRepository 未初始化!请先在 Application.onCreate() 中调用 setInstance(context)"
|
|
|
);
|
|
|
}
|
|
|
return instance;
|
|
|
@@ -89,6 +94,7 @@ public class NetworkRepository {
|
|
|
/**
|
|
|
* 创建 API 服务
|
|
|
*/
|
|
|
+ @OptIn(markerClass = UnstableApi.class)
|
|
|
private ChinaTowerApiService createApiService() {
|
|
|
// 创建详细的日志拦截器
|
|
|
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(message -> {
|
|
|
@@ -109,25 +115,25 @@ public class NetworkRepository {
|
|
|
request.headers().forEach(header -> {
|
|
|
Log.i(TAG, " " + header.getFirst() + ": " + header.getSecond());
|
|
|
});
|
|
|
-
|
|
|
+
|
|
|
// 打印请求体
|
|
|
+// 打印请求体
|
|
|
if (request.body() != null) {
|
|
|
try {
|
|
|
RequestBody requestBody = request.body();
|
|
|
- if (requestBody != null) {
|
|
|
- okio.Buffer buffer = new okio.Buffer();
|
|
|
- requestBody.writeTo(buffer);
|
|
|
- String requestBodyString = buffer.readString(StandardCharsets.UTF_8);
|
|
|
-// Log.i(TAG, "请求体: " + requestBodyString);
|
|
|
- }
|
|
|
+ Buffer buffer = new Buffer();
|
|
|
+ requestBody.writeTo(buffer);
|
|
|
+ String requestBodyString = buffer.readByteString().utf8();
|
|
|
+ Log.i(TAG, "请求体: " + requestBodyString);
|
|
|
} catch (Exception e) {
|
|
|
Log.e(TAG, "打印请求体失败: " + e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
// 执行请求
|
|
|
Response response = chain.proceed(request);
|
|
|
-
|
|
|
+
|
|
|
// 打印响应信息
|
|
|
// Log.i(TAG, "=== 网络响应 ===");
|
|
|
// Log.i(TAG, "响应码: " + response.code());
|
|
|
@@ -138,14 +144,14 @@ public class NetworkRepository {
|
|
|
response.headers().forEach(header -> {
|
|
|
Log.i(TAG, " " + header.getFirst() + ": " + header.getSecond());
|
|
|
});
|
|
|
-
|
|
|
+
|
|
|
// 打印响应体
|
|
|
ResponseBody responseBody = response.body();
|
|
|
if (responseBody != null) {
|
|
|
try {
|
|
|
String responseBodyString = responseBody.string();
|
|
|
Log.i(TAG, "响应体: " + responseBodyString);
|
|
|
-
|
|
|
+
|
|
|
// 重新创建 ResponseBody,因为读取后需要重新创建
|
|
|
MediaType contentType = responseBody.contentType();
|
|
|
ResponseBody newResponseBody = ResponseBody.create(responseBodyString, contentType);
|
|
|
@@ -154,7 +160,7 @@ public class NetworkRepository {
|
|
|
Log.e(TAG, "打印响应体失败: " + e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
Log.i(TAG, "=== 网络请求结束 ===");
|
|
|
return response;
|
|
|
};
|
|
|
@@ -166,201 +172,201 @@ public class NetworkRepository {
|
|
|
.addInterceptor(customInterceptor)
|
|
|
.addInterceptor(loggingInterceptor)
|
|
|
.build();
|
|
|
-
|
|
|
+
|
|
|
Retrofit retrofit = new Retrofit.Builder()
|
|
|
.baseUrl(BASE_URL)
|
|
|
.client(okHttpClient)
|
|
|
.addConverterFactory(GsonConverterFactory.create())
|
|
|
.build();
|
|
|
-
|
|
|
+
|
|
|
return retrofit.create(ChinaTowerApiService.class);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 验证码登录
|
|
|
*/
|
|
|
public Single<OAuth2TokenResponse> loginWithSmsCode(String phone, String code) {
|
|
|
Log.i(TAG, "开始验证码登录: " + phone);
|
|
|
-
|
|
|
+
|
|
|
return Single.fromCallable(() -> {
|
|
|
- try {
|
|
|
- retrofit2.Response<OAuth2TokenResponse> response = chinaTowerApiService.getOAuth2Token(
|
|
|
- AuthUtil.generateDefaultBasicAuth(),
|
|
|
- phone,
|
|
|
- "mobile",
|
|
|
- "server",
|
|
|
- code
|
|
|
- ).execute();
|
|
|
-
|
|
|
- if (response.isSuccessful() && response.body() != null && response.code() == 200) {
|
|
|
- OAuth2TokenResponse tokenResponse = response.body();
|
|
|
- Log.i(TAG,"loginWithSmsCode: "+ JsonUtil.toJson(tokenResponse));
|
|
|
- // 保存token
|
|
|
- sessionManager.saveAuthTokenWithExpiry(tokenResponse.getAccessToken(), tokenResponse.getExp());
|
|
|
- // 保存用户数据
|
|
|
- sessionManager.saveUserData(tokenResponse);
|
|
|
- // 保存刷新token
|
|
|
- sessionManager.saveRefreshToken(tokenResponse.getRefreshToken());
|
|
|
-
|
|
|
- Log.i(TAG, "验证码登录成功");
|
|
|
- return tokenResponse;
|
|
|
- } else {
|
|
|
- Log.e(TAG, "验证码登录失败: " + response.message());
|
|
|
- throw new IOException("登录失败: " + response.message());
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- Log.e(TAG, "验证码登录异常: " + e.getMessage(), e);
|
|
|
- throw new IOException("网络请求失败: " + e.getMessage());
|
|
|
- }
|
|
|
- }).subscribeOn(Schedulers.io())
|
|
|
- .observeOn(AndroidSchedulers.mainThread());
|
|
|
+ try {
|
|
|
+ retrofit2.Response<OAuth2TokenResponse> response = chinaTowerApiService.getOAuth2Token(
|
|
|
+ AuthUtil.generateDefaultBasicAuth(),
|
|
|
+ phone,
|
|
|
+ "mobile",
|
|
|
+ "server",
|
|
|
+ code
|
|
|
+ ).execute();
|
|
|
+
|
|
|
+ if (response.isSuccessful() && response.body() != null && response.code() == 200) {
|
|
|
+ OAuth2TokenResponse tokenResponse = response.body();
|
|
|
+ Log.i(TAG,"loginWithSmsCode: "+ JsonUtil.toJson(tokenResponse));
|
|
|
+ // 保存token
|
|
|
+ sessionManager.saveAuthTokenWithExpiry(tokenResponse.getAccessToken(), tokenResponse.getExp());
|
|
|
+ // 保存用户数据
|
|
|
+ sessionManager.saveUserData(tokenResponse);
|
|
|
+ // 保存刷新token
|
|
|
+ sessionManager.saveRefreshToken(tokenResponse.getRefreshToken());
|
|
|
+
|
|
|
+ Log.i(TAG, "验证码登录成功");
|
|
|
+ return tokenResponse;
|
|
|
+ } else {
|
|
|
+ Log.e(TAG, "验证码登录失败: " + response.message());
|
|
|
+ throw new IOException("登录失败: " + response.message());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ Log.e(TAG, "验证码登录异常: " + e.getMessage(), e);
|
|
|
+ throw new IOException("网络请求失败: " + e.getMessage());
|
|
|
+ }
|
|
|
+ }).subscribeOn(Schedulers.io())
|
|
|
+ .observeOn(AndroidSchedulers.mainThread());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 密码登录
|
|
|
*/
|
|
|
public Single<OAuth2TokenResponse> loginWithPassword(String username, String password) {
|
|
|
Log.i(TAG, "开始密码登录: " + username);
|
|
|
-
|
|
|
+
|
|
|
return Single.fromCallable(() -> {
|
|
|
- try {
|
|
|
- retrofit2.Response<OAuth2TokenResponse> response = chinaTowerApiService.getOAuth2TokenByPassword(
|
|
|
- "Basic c2VydmVyOjEyMzQ1Ng==", // 默认Basic Auth
|
|
|
- username,
|
|
|
- password,
|
|
|
- "password",
|
|
|
- "server"
|
|
|
- ).execute();
|
|
|
-
|
|
|
- if (response.isSuccessful() && response.body() != null) {
|
|
|
- OAuth2TokenResponse tokenResponse = response.body();
|
|
|
- // 保存token
|
|
|
- sessionManager.saveAuthTokenWithExpiry(tokenResponse.getAccessToken(), tokenResponse.getExp());
|
|
|
- // 保存用户数据
|
|
|
- sessionManager.saveUserData(tokenResponse);
|
|
|
- // 保存刷新token
|
|
|
- sessionManager.saveRefreshToken(tokenResponse.getRefreshToken());
|
|
|
-
|
|
|
- Log.i(TAG, "密码登录成功");
|
|
|
- return tokenResponse;
|
|
|
- } else {
|
|
|
- Log.e(TAG, "密码登录失败: " + response.message());
|
|
|
- throw new IOException("登录失败: " + response.message());
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- Log.e(TAG, "密码登录异常: " + e.getMessage(), e);
|
|
|
- throw new IOException("网络请求失败: " + e.getMessage());
|
|
|
- }
|
|
|
- }).subscribeOn(Schedulers.io())
|
|
|
- .observeOn(AndroidSchedulers.mainThread());
|
|
|
+ try {
|
|
|
+ retrofit2.Response<OAuth2TokenResponse> response = chinaTowerApiService.getOAuth2TokenByPassword(
|
|
|
+ "Basic c2VydmVyOjEyMzQ1Ng==", // 默认Basic Auth
|
|
|
+ username,
|
|
|
+ password,
|
|
|
+ "password",
|
|
|
+ "server"
|
|
|
+ ).execute();
|
|
|
+
|
|
|
+ if (response.isSuccessful() && response.body() != null) {
|
|
|
+ OAuth2TokenResponse tokenResponse = response.body();
|
|
|
+ // 保存token
|
|
|
+ sessionManager.saveAuthTokenWithExpiry(tokenResponse.getAccessToken(), tokenResponse.getExp());
|
|
|
+ // 保存用户数据
|
|
|
+ sessionManager.saveUserData(tokenResponse);
|
|
|
+ // 保存刷新token
|
|
|
+ sessionManager.saveRefreshToken(tokenResponse.getRefreshToken());
|
|
|
+
|
|
|
+ Log.i(TAG, "密码登录成功");
|
|
|
+ return tokenResponse;
|
|
|
+ } else {
|
|
|
+ Log.e(TAG, "密码登录失败: " + response.message());
|
|
|
+ throw new IOException("登录失败: " + response.message());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ Log.e(TAG, "密码登录异常: " + e.getMessage(), e);
|
|
|
+ throw new IOException("网络请求失败: " + e.getMessage());
|
|
|
+ }
|
|
|
+ }).subscribeOn(Schedulers.io())
|
|
|
+ .observeOn(AndroidSchedulers.mainThread());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 刷新token
|
|
|
*/
|
|
|
public Single<RefreshTokenResponse> refreshToken() {
|
|
|
Log.i(TAG, "开始刷新token");
|
|
|
-
|
|
|
+
|
|
|
return Single.fromCallable(() -> {
|
|
|
- String refreshToken = sessionManager.fetchRefreshToken();
|
|
|
- if (refreshToken == null) {
|
|
|
- Log.e(TAG, "没有可用的刷新token");
|
|
|
- throw new IOException("没有可用的刷新token");
|
|
|
- }
|
|
|
-
|
|
|
- try {
|
|
|
- retrofit2.Response<RefreshTokenResponse> response = chinaTowerApiService.refreshToken(
|
|
|
- "Basic c2VydmVyOjEyMzQ1Ng==",
|
|
|
- "refresh_token",
|
|
|
- refreshToken,
|
|
|
- "server"
|
|
|
- ).execute();
|
|
|
-
|
|
|
- if (response.isSuccessful() && response.body() != null) {
|
|
|
- RefreshTokenResponse refreshResponse = response.body();
|
|
|
- // 更新token
|
|
|
- sessionManager.updateTokenWithExpiresIn(
|
|
|
- refreshResponse.getAccessToken(),
|
|
|
- refreshResponse.getExpiresIn()
|
|
|
- );
|
|
|
-
|
|
|
- Log.i(TAG, "token刷新成功");
|
|
|
- return refreshResponse;
|
|
|
- } else {
|
|
|
- Log.e(TAG, "token刷新失败: " + response.message());
|
|
|
- throw new IOException("token刷新失败: " + response.message());
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- Log.e(TAG, "token刷新异常: " + e.getMessage(), e);
|
|
|
- throw new IOException("网络请求失败: " + e.getMessage());
|
|
|
- }
|
|
|
- }).subscribeOn(Schedulers.io())
|
|
|
- .observeOn(AndroidSchedulers.mainThread());
|
|
|
+ String refreshToken = sessionManager.fetchRefreshToken();
|
|
|
+ if (refreshToken == null) {
|
|
|
+ Log.e(TAG, "没有可用的刷新token");
|
|
|
+ throw new IOException("没有可用的刷新token");
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ retrofit2.Response<RefreshTokenResponse> response = chinaTowerApiService.refreshToken(
|
|
|
+ "Basic c2VydmVyOjEyMzQ1Ng==",
|
|
|
+ "refresh_token",
|
|
|
+ refreshToken,
|
|
|
+ "server"
|
|
|
+ ).execute();
|
|
|
+
|
|
|
+ if (response.isSuccessful() && response.body() != null) {
|
|
|
+ RefreshTokenResponse refreshResponse = response.body();
|
|
|
+ // 更新token
|
|
|
+ sessionManager.updateTokenWithExpiresIn(
|
|
|
+ refreshResponse.getAccessToken(),
|
|
|
+ refreshResponse.getExpiresIn()
|
|
|
+ );
|
|
|
+
|
|
|
+ Log.i(TAG, "token刷新成功");
|
|
|
+ return refreshResponse;
|
|
|
+ } else {
|
|
|
+ Log.e(TAG, "token刷新失败: " + response.message());
|
|
|
+ throw new IOException("token刷新失败: " + response.message());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ Log.e(TAG, "token刷新异常: " + e.getMessage(), e);
|
|
|
+ throw new IOException("网络请求失败: " + e.getMessage());
|
|
|
+ }
|
|
|
+ }).subscribeOn(Schedulers.io())
|
|
|
+ .observeOn(AndroidSchedulers.mainThread());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 发送验证码
|
|
|
*/
|
|
|
public Single<SmsCodeResponse> sendSmsCode(String phone) {
|
|
|
Log.i(TAG, "发送验证码: " + phone);
|
|
|
-
|
|
|
+
|
|
|
return Single.fromCallable(() -> {
|
|
|
- try {
|
|
|
- retrofit2.Response<SmsCodeResponse> response = chinaTowerApiService.sendSmsCode(phone).execute();
|
|
|
-
|
|
|
- if (response.isSuccessful() && response.body() != null && response.code() == 200) {
|
|
|
- Log.i(TAG, "验证码发送成功");
|
|
|
- return response.body();
|
|
|
- } else {
|
|
|
- Log.e(TAG, "验证码发送失败: " + response.message());
|
|
|
- throw new IOException("验证码发送失败: " + response.message());
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- Log.e(TAG, "验证码发送异常: " + e.getMessage(), e);
|
|
|
- throw new IOException("网络请求失败: " + e.getMessage());
|
|
|
- }
|
|
|
- }).subscribeOn(Schedulers.io())
|
|
|
- .observeOn(AndroidSchedulers.mainThread());
|
|
|
+ try {
|
|
|
+ retrofit2.Response<SmsCodeResponse> response = chinaTowerApiService.sendSmsCode(phone).execute();
|
|
|
+
|
|
|
+ if (response.isSuccessful() && response.body() != null && response.code() == 200) {
|
|
|
+ Log.i(TAG, "验证码发送成功");
|
|
|
+ return response.body();
|
|
|
+ } else {
|
|
|
+ Log.e(TAG, "验证码发送失败: " + response.message());
|
|
|
+ throw new IOException("验证码发送失败: " + response.message());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ Log.e(TAG, "验证码发送异常: " + e.getMessage(), e);
|
|
|
+ throw new IOException("网络请求失败: " + e.getMessage());
|
|
|
+ }
|
|
|
+ }).subscribeOn(Schedulers.io())
|
|
|
+ .observeOn(AndroidSchedulers.mainThread());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 设备注册
|
|
|
*/
|
|
|
public Single<RegisterDeviceResponse> registerDevice(String deviceSn, String model, String longitude, String latitude) {
|
|
|
Log.i(TAG, "注册设备: " + deviceSn);
|
|
|
-
|
|
|
+
|
|
|
return Single.fromCallable(() -> {
|
|
|
- // 检查token是否有效
|
|
|
- String token = getValidToken();
|
|
|
- if (token == null) {
|
|
|
- Log.e(TAG, "没有有效的token");
|
|
|
- throw new IOException("没有有效的token,请先登录");
|
|
|
- }
|
|
|
+ // 检查token是否有效
|
|
|
+ String token = getValidToken();
|
|
|
+ if (token == null) {
|
|
|
+ Log.e(TAG, "没有有效的token");
|
|
|
+ throw new IOException("没有有效的token,请先登录");
|
|
|
+ }
|
|
|
|
|
|
-
|
|
|
- try {
|
|
|
- retrofit2.Response<RegisterDeviceResponse> response = chinaTowerApiService.registerDevice(
|
|
|
- "Bearer "+sessionManager.fetchAuthToken(),
|
|
|
- new RegisterRequest(deviceSn, model, longitude, latitude)
|
|
|
- ).execute();
|
|
|
-
|
|
|
- if (response.isSuccessful() && response.body() != null && response.code() == 200) {
|
|
|
- // 保存MQTT信息
|
|
|
- sessionManager.saveMqttInfo(response.body().getData());
|
|
|
- Log.i(TAG, "设备注册成功");
|
|
|
- return response.body();
|
|
|
- } else {
|
|
|
- Log.e(TAG, "设备注册失败: " + response.message());
|
|
|
- throw new IOException("设备注册失败: " + response.message());
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- Log.e(TAG, "设备注册异常: " + e.getMessage(), e);
|
|
|
- throw new IOException("网络请求失败: " + e.getMessage());
|
|
|
- }
|
|
|
- }).subscribeOn(Schedulers.io())
|
|
|
- .observeOn(AndroidSchedulers.mainThread());
|
|
|
+
|
|
|
+ try {
|
|
|
+ retrofit2.Response<RegisterDeviceResponse> response = chinaTowerApiService.registerDevice(
|
|
|
+ "Bearer "+sessionManager.fetchAuthToken(),
|
|
|
+ new RegisterRequest(deviceSn, model, longitude, latitude)
|
|
|
+ ).execute();
|
|
|
+
|
|
|
+ if (response.isSuccessful() && response.body() != null && response.code() == 200) {
|
|
|
+ // 保存MQTT信息
|
|
|
+ sessionManager.saveMqttInfo(response.body().getData());
|
|
|
+ Log.i(TAG, "设备注册成功");
|
|
|
+ return response.body();
|
|
|
+ } else {
|
|
|
+ Log.e(TAG, "设备注册失败: " + response.message());
|
|
|
+ throw new IOException("设备注册失败: " + response.message());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ Log.e(TAG, "设备注册异常: " + e.getMessage(), e);
|
|
|
+ throw new IOException("网络请求失败: " + e.getMessage());
|
|
|
+ }
|
|
|
+ }).subscribeOn(Schedulers.io())
|
|
|
+ .observeOn(AndroidSchedulers.mainThread());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 检查用户是否已登录且token有效
|
|
|
* 会自动尝试刷新即将过期的token
|
|
|
@@ -368,7 +374,7 @@ public class NetworkRepository {
|
|
|
public boolean isLoggedIn() {
|
|
|
boolean isSessionValid = sessionManager.isLoggedIn();
|
|
|
Log.i(TAG, "检查登录状态: " + isSessionValid);
|
|
|
-
|
|
|
+
|
|
|
// 如果session有效但token即将过期,尝试刷新
|
|
|
if (isSessionValid && sessionManager.getSessionRemainingTime() < 5 * 60 * 1000) {
|
|
|
Log.i(TAG, "Token即将过期,尝试刷新");
|
|
|
@@ -380,17 +386,17 @@ public class NetworkRepository {
|
|
|
isSessionValid = false;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
return isSessionValid;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 获取用户Token
|
|
|
*/
|
|
|
public String getUserToken() {
|
|
|
return sessionManager.fetchAuthToken();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 获取用户ID
|
|
|
*/
|
|
|
@@ -423,36 +429,36 @@ public class NetworkRepository {
|
|
|
}
|
|
|
return token;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 获取用户名
|
|
|
*/
|
|
|
public String getUsername() {
|
|
|
return sessionManager.fetchUsername();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 获取昵称
|
|
|
*/
|
|
|
public String getNickName() {
|
|
|
return sessionManager.fetchNickName();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 获取MQTT信息
|
|
|
*/
|
|
|
public String getMqttUsername() {
|
|
|
return sessionManager.fetchMqttUsername();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public String getMqttPassword() {
|
|
|
return sessionManager.fetchMqttPassword();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public String getMqttAddr() {
|
|
|
return sessionManager.fetchMqttAddr();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 清除登录信息
|
|
|
*/
|
|
|
@@ -460,7 +466,7 @@ public class NetworkRepository {
|
|
|
sessionManager.clearLoginInfo();
|
|
|
Log.i(TAG, "登录信息已清除");
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 清除MQTT信息
|
|
|
*/
|
|
|
@@ -468,7 +474,7 @@ public class NetworkRepository {
|
|
|
sessionManager.clearMqttInfo();
|
|
|
Log.i(TAG, "MQTT信息已清除");
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 延长会话时间
|
|
|
*/
|
|
|
@@ -476,14 +482,14 @@ public class NetworkRepository {
|
|
|
sessionManager.extendSession();
|
|
|
Log.i(TAG, "会话时间已延长");
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 获取会话剩余时间
|
|
|
*/
|
|
|
public long getSessionRemainingTime() {
|
|
|
return sessionManager.getSessionRemainingTime();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 统一错误处理
|
|
|
*/
|
|
|
@@ -509,7 +515,7 @@ public class NetworkRepository {
|
|
|
return "未知错误: " + throwable.getMessage();
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* 释放资源
|
|
|
*/
|