Skip to content

Commit 1089449

Browse files
committed
2 parents 92429f6 + 5ac4d1b commit 1089449

35 files changed

Lines changed: 420 additions & 370 deletions

mobile/AD/.idea/deploymentTargetSelector.xml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mobile/AD/app/src/main/AndroidManifest.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:tools="http://schemas.android.com/tools">
3+
xmlns:tools="http://schemas.android.com/tools"
4+
package="iss.nus.edu.sg.sharedprefs.admobile">
45
<uses-permission android:name="android.permission.INTERNET" />
5-
<!-- Required when targeting Android 13+ if any code (e.g. Glide NotificationTarget) posts notifications -->
6-
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
76
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
87
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
98
<uses-permission android:name="android.permission.CAMERA" />
@@ -17,7 +16,8 @@
1716
android:label="@string/app_name"
1817
android:roundIcon="@mipmap/ic_launcher_round"
1918
android:supportsRtl="true"
20-
android:theme="@style/Theme.ADMobile">
19+
android:theme="@style/Theme.ADMobile"
20+
android:usesCleartextTraffic="true">
2121

2222
<meta-data
2323
android:name="com.google.android.geo.API_KEY"

mobile/AD/app/src/main/java/iss/nus/edu/sg/sharedprefs/admobile/data/model/AuthDto.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ data class RegisterRequestDto(
88
val email: String,
99
val password: String,
1010
val birthDate: String,
11-
@SerializedName("Region") // 🌟 告诉 Retrofit:发请求时 JSON 字段叫 "Region"
12-
val region: String // 🌟 告诉 Kotlin:代码里这个变量叫 region
11+
@SerializedName("Region")
12+
val region: String
1313
)
1414

1515
// 2. 登录请求
@@ -18,7 +18,7 @@ data class LoginRequestDto(
1818
val password: String
1919
)
2020

21-
// 3. 用户详细信息 (从 Swagger 响应提取)
21+
// 3. 用户详细信息
2222
data class UserSummaryDto(
2323
val id: String,
2424
val username: String,

mobile/AD/app/src/main/java/iss/nus/edu/sg/sharedprefs/admobile/data/model/FoodDto.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ data class BarcodeResponse(
5959
)
6060

6161
// 批量删除请求体
62-
// 新的批量删除请求单条目 DTO
6362
data class TypedDeleteEntry(
6463
val type: Int, // 1=Food, 2=Travel, 3=Utility
6564
val id: Int
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package iss.nus.edu.sg.sharedprefs.admobile.data.model
22

3+
enum class RankingType { DAILY, MONTHLY, TOTAL }
34
data class LeaderboardItem(
45
val rank: Int,
56
val username: String,
67
val nickname: String?,
78
val emissionsTotal: Double,
89
val avatarUrl: String?,
9-
val pointsTotal: Int
10+
val pointsToday: Int = 0,
11+
val pointsMonth: Int = 0,
12+
val pointsTotal: Int = 0
1013
)

mobile/AD/app/src/main/java/iss/nus/edu/sg/sharedprefs/admobile/data/model/MainPageDto.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ data class UserStatsResponse(
1919
// 请求体
2020
data class StepSyncRequest(
2121
val stepCount: Int,
22-
val date: String // 后端要求的格式: "2026-02-04T05:58:42.407Z"
22+
val date: String
2323
)
2424

2525
// 响应体

mobile/AD/app/src/main/java/iss/nus/edu/sg/sharedprefs/admobile/data/model/TravelDto.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package iss.nus.edu.sg.sharedprefs.admobile.data.model
22

3-
// 1. 发送给后端的请求对象 (对应 Swagger Request Body)
3+
// 1. 发送给后端的请求对象
44
data class AddTravelRequest(
5-
val originAddress: String, // 起点地址文字
6-
val destinationAddress: String, // 终点地址文字
7-
val transportMode: Int, // 交通工具 ID (0, 1, 2...)
8-
val notes: String? // 备注
5+
val originAddress: String,
6+
val destinationAddress: String,
7+
val transportMode: Int,
8+
val notes: String?
99
)
1010

11-
// 2. 后端返回的结果对象 (对应 Swagger 200 Response)
11+
// 2. 后端返回的结果对象
1212
data class TravelResponse(
1313
val id: Int,
1414
val transportModeName: String,

mobile/AD/app/src/main/java/iss/nus/edu/sg/sharedprefs/admobile/data/network/EcoLensApiService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ interface EcoLensApiService {
9494

9595
// 获取总排行榜 (假设路径为原有的 api/Leaderboard)
9696
@GET("api/Leaderboard")
97-
suspend fun getAllTimeLeaderboard(@Query("limit") limit: Int): Response<List<LeaderboardItem>>
97+
suspend fun getAllTimeLeaderboard(@Query("period") period: String = "total",@Query("limit") limit: Int): Response<List<LeaderboardItem>>
9898

9999
// ApiService.kt
100100
@POST("api/ai/chat")

mobile/AD/app/src/main/java/iss/nus/edu/sg/sharedprefs/admobile/data/network/NetworkClient.kt

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,34 @@
11
package iss.nus.edu.sg.sharedprefs.admobile.data.network
22

33
import okhttp3.OkHttpClient
4+
import okhttp3.logging.HttpLoggingInterceptor
45
import retrofit2.Retrofit
56
import retrofit2.converter.gson.GsonConverterFactory
67
import java.util.concurrent.TimeUnit
78

89
object NetworkClient {
9-
private const val BASE_URL = "https://ecolens-api-daa7a0e4a3d4d7e8.southeastasia-01.azurewebsites.net/"
10+
private const val BASE_URL = "http://10.0.2.2:5133/"
11+
//private const val BASE_URL = "https://ecolens-api-daa7a0e4a3d4d7e8.southeastasia-01.azurewebsites.net/"
1012

11-
// 1. 创建自定义的 OkHttpClient
13+
// 1. 日志拦截器
14+
private val loggingInterceptor = HttpLoggingInterceptor().apply {
15+
// Level.BODY 会打印:请求行、请求头、请求体、响应行、响应头、响应体
16+
// 这对调试 Multipart 上传至关重要
17+
level = HttpLoggingInterceptor.Level.BODY
18+
}
19+
20+
// 2. 自定义的 OkHttpClient
1221
private val okHttpClient = OkHttpClient.Builder()
13-
.connectTimeout(30, TimeUnit.SECONDS) // 连接服务器超时:30秒
14-
.readTimeout(60, TimeUnit.SECONDS) // 等待服务器返回数据超时(这对AI很重要):60秒
15-
.writeTimeout(30, TimeUnit.SECONDS) // 发送数据给服务器超时:30秒
22+
// 🌟 注入日志拦截器
23+
.addInterceptor(loggingInterceptor)
24+
.connectTimeout(30, TimeUnit.SECONDS)
25+
.readTimeout(60, TimeUnit.SECONDS)
26+
.writeTimeout(30, TimeUnit.SECONDS)
1627
.build()
1728

1829
val apiService: EcoLensApiService by lazy {
1930
Retrofit.Builder()
2031
.baseUrl(BASE_URL)
21-
// 2. 将自定义的 client 关联到 Retrofit
2232
.client(okHttpClient)
2333
.addConverterFactory(GsonConverterFactory.create())
2434
.build()

mobile/AD/app/src/main/java/iss/nus/edu/sg/sharedprefs/admobile/data/repository/AuthRepository.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,12 @@ class AuthRepository(context: Context) {
2424
}
2525
}
2626

27-
// AuthRepository.kt 中的建议写法
2827
suspend fun register(request: RegisterRequestDto): Result<Unit> {
2928
return try {
3029
val response = apiService.register(request) // 假设返回的是 Response<Unit>
3130
if (response.isSuccessful) {
3231
Result.success(Unit)
3332
} else {
34-
// 🌟 关键:提取后端返回的原始 JSON 错误信息
3533
val errorJson = response.errorBody()?.string() ?: "Unknown server error"
3634
Log.e("API_DEBUG", "Server Response Error Body: $errorJson")
3735

@@ -48,15 +46,12 @@ class AuthRepository(context: Context) {
4846
putString("token", data.token)
4947
putString("userId", data.user.id)
5048
putString("username", data.user.username)
51-
// 存下这些,ProfileActivity 就能直接显示了
5249
apply()
5350
}
5451
}
5552

56-
// AuthRepository.kt 增加以下方法
5753
suspend fun getMainPageData(token: String): Result<MainPageResponseDto> {
5854
return try {
59-
// 注意:这里需要传入 Bearer 前缀
6055
val response = apiService.getMainPageData("Bearer $token")
6156
if (response.isSuccessful) {
6257
Result.success(response.body()!!)

0 commit comments

Comments
 (0)