Andorid + API实战
1. 工程搭建
- 定义数据模型 ChatRequest, CharResponse, Message
- 关键坑点 数据模型定义变量时,obejct是Kotlin关键字,需要使用@SerializedName("object")映射
2. 非流式API
- 架构分层 Activity -> ViewModel -> Repository -> ApiService
- 状态管理 LiveData 管理 message,loading,error
- UI实现 RecyclerView + Adapter
- 关键坑点 历史会话 history 不应该包含当前用户的输入消息,需要使用 dropLast(1) 排除
3. SEE原理
3.1 SSE定义
SSE(Server-Send Event) 是一种服务器主动向客户端推送数据技术
传统HTTP请求(非流式):
Client ──请求──> Server
Client <──完整响应── Server
SSE(流式):
Client ──请求──> Server
Client <──数据块1── Server
Client <──数据块2── Server
Client <──数据块3── Server
Client <──结束标记── Server
优势
- 首字延迟
- 体验更流畅
- 可中途取消
3.2 SSE数据格式
基本格式
data: 这是第一行消息内容
data: 这是第二行消息内容
data: 可以跨多行
data: {"message": "JSON格式也可以"}
data: [DONE]
关键规则
- 每个消息以 data: 开头
- 容可以是纯文本或JSON
- 息以两个换行符 \n\n 结束
- data: [DONE] 表示传输结束
4. 流式API
-
实现方式 OKHttp + 手动解析
-
回调接口 自己定义流式回调接口:onNewContent、onComplete、onComplete
-
UI更新 收到临时消息,逐字追加更新
5. 历史管理
- 原理 每次请求都携带历史对话
- Token控制 设定最多保留对话轮数,超过了,则丢弃最远的历史对话
6. 语音输入
- 方案选择 Vosk(离线、免费、隐私安全)
7. 整合
完整链路
- 1.定义网络api接口,同时定义输入输出实体:ChatRequest,ChatResponse
- 2.定义网络请求客户端 RetrofitClient
- 3.定义仓库类 ChatRepository
- 4.定义数据模型model:ChatMessage
- 5.定义ViewModel:ChatViewModel
调用路径 Activity/Fragment -> ViewModel -> Repository -> ServiceAPI
监听回调 Activity/Fragment 通过ViewMode的LiveData监听结果
附件传上完整的demo代码
注意点
- 在 ChatRepository 类中把 apikey 替换成自己在 DeepSeek 平台申请的key即可