# Android Agent调用示例 (Java版本)

这是一个使用Java开发的Android示例项目，演示如何调用情感分析Agent。

## 📋 项目结构

```
androidExampleDemo/
├── app/
│   ├── src/
│   │   └── main/
│   │       ├── java/com/example/agentclient/
│   │       │   ├── MainActivity.java
│   │       │   ├── models/
│   │       │   │   ├── Agent.java
│   │       │   │   ├── AgentExecutionRequest.java
│   │       │   │   ├── ExecutionResponse.java
│   │       │   │   ├── ExecutionStatusResponse.java
│   │       │   │   └── TokenResponse.java
│   │       │   └── utils/
│   │       │       └── ApiClient.java
│   │       ├── res/
│   │       │   ├── layout/
│   │       │   │   └── activity_main.xml
│   │       │   ├── values/
│   │       │   │   └── strings.xml
│   │       │   └── xml/
│   │       │       └── network_security_config.xml
│   │       └── AndroidManifest.xml
│   └── build.gradle
├── build.gradle
├── settings.gradle
├── gradle.properties
└── README.md
```

## 🚀 快速开始

### 1. 配置API地址

在 `app/src/main/java/com/example/agentclient/utils/ApiClient.java` 中修改：

```java
private static final String BASE_URL = "http://your-server-ip:8037";
```

### 2. 配置登录信息

在 `MainActivity.java` 中修改：

```java
private static final String USERNAME = "admin";
private static final String PASSWORD = "123456";
private static final String AGENT_NAME = "情感分析Agent";  // Agent名称
```

### 3. 运行项目

1. 使用Android Studio打开项目
2. 同步Gradle依赖
3. 运行到Android设备或模拟器

## 📱 功能特性

- ✅ 用户登录
- ✅ 调用Agent API
- ✅ 实时显示执行状态
- ✅ 显示Agent回复
- ✅ 错误处理

## 🔧 依赖库

- Retrofit2：网络请求
- OkHttp：HTTP客户端
- Gson：JSON解析
- AndroidX：Android支持库

## 📝 使用说明

1. **登录**
   - 应用启动后会自动登录（使用配置的用户名和密码）
   - 登录成功后可以开始使用Agent

2. **发送消息**
   - 在输入框中输入文本
   - 点击"发送"按钮
   - 等待Agent处理并返回结果

3. **查看结果**
   - Agent的回复会显示在消息列表中
   - 执行状态会实时更新

## 🔑 API说明

### 登录API
```
POST /api/v1/auth/login
Content-Type: application/x-www-form-urlencoded

username=admin&password=123456
```

### 执行Agent API
```
POST /api/v1/executions
Authorization: Bearer <token>
Content-Type: application/json

{
  "agent_id": "agent-id",
  "input_data": {
    "query": "用户输入",
    "USER_INPUT": "用户输入"
  }
}
```

### 获取执行状态API
```
GET /api/v1/executions/{execution_id}/status
Authorization: Bearer <token>
```

### 获取执行结果API
```
GET /api/v1/executions/{execution_id}
Authorization: Bearer <token>
```

## 🎯 示例：调用情感分析Agent

```java
// 1. 登录获取token
Call<TokenResponse> loginCall = ApiClient.getService().login("admin", "123456");
loginCall.enqueue(new Callback<TokenResponse>() {
    @Override
    public void onResponse(Call<TokenResponse> call, Response<TokenResponse> response) {
        if (response.isSuccessful()) {
            String token = "Bearer " + response.body().getAccessToken();
            
            // 2. 通过名称查找Agent
            Call<List<Agent>> agentsCall = ApiClient.getService()
                .getAgents("情感分析Agent", 100, token);
            agentsCall.enqueue(new Callback<List<Agent>>() {
                @Override
                public void onResponse(Call<List<Agent>> call, Response<List<Agent>> response) {
                    if (response.isSuccessful() && response.body() != null) {
                        String agentId = response.body().get(0).getId();
                        
                        // 3. 执行Agent
                        Map<String, Object> inputData = new HashMap<>();
                        inputData.put("query", "这个产品真的很棒！");
                        inputData.put("USER_INPUT", "这个产品真的很棒！");
                        
                        AgentExecutionRequest request = new AgentExecutionRequest(agentId, inputData);
                        Call<ExecutionResponse> execCall = ApiClient.getService()
                            .executeAgent(request, token);
                        execCall.enqueue(new Callback<ExecutionResponse>() {
                            @Override
                            public void onResponse(Call<ExecutionResponse> call, 
                                    Response<ExecutionResponse> response) {
                                if (response.isSuccessful()) {
                                    String executionId = response.body().getId();
                                    // 4. 轮询获取结果（见MainActivity.pollExecutionResult方法）
                                }
                            }
                            
                            @Override
                            public void onFailure(Call<ExecutionResponse> call, Throwable t) {
                                // 处理错误
                            }
                        });
                    }
                }
                
                @Override
                public void onFailure(Call<List<Agent>> call, Throwable t) {
                    // 处理错误
                }
            });
        }
    }
    
    @Override
    public void onFailure(Call<TokenResponse> call, Throwable t) {
        // 处理错误
    }
});
```

## 📦 构建要求

- Android Studio Hedgehog | 2023.1.1 或更高版本
- JDK 17 或更高版本
- Android SDK API 24 或更高版本
- Gradle 8.0 或更高版本

## 💻 开发语言

- **Java 17** - 主要开发语言
- 使用Retrofit进行网络请求
- 使用Gson进行JSON解析

## 🔒 安全注意事项

1. **不要硬编码密码**：生产环境应该使用安全的认证方式
2. **使用HTTPS**：生产环境必须使用HTTPS
3. **Token管理**：妥善保管和刷新Token
4. **网络安全配置**：Android 9+需要配置网络安全策略

## 🐛 故障排除

### 问题1：网络连接失败
- 检查API地址是否正确
- 检查设备网络连接
- 检查服务器是否运行

### 问题2：登录失败
- 检查用户名和密码是否正确
- 检查服务器认证服务是否正常

### 问题3：Agent执行失败
- 检查Agent ID是否正确
- 检查Agent是否已发布
- 查看服务器日志获取详细错误信息

## 📚 相关文档

- [Agent使用说明](../Agent使用说明.md)
- [API文档](../backend/API_DOCUMENTATION.md)
