You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android端Google登录后无法获取PHP网站MySQL数据库待办数据求助

Hey Christophe, 我帮你梳理下解决思路,你遇到的核心问题确实是Google登录Token的传递以及后续用这个Token去后端验证并获取数据,咱们一步步来拆解:

第一步:在LoginActivity中传递Token到待办页面

登录成功拿到Google的ID Token后,直接通过Intent的putExtra方法把Token传递到目标页面就行,代码示例如下:

// 假设你已经通过Google登录流程获取到了idToken字符串
String idToken = googleSignInAccount.getIdToken();

// 创建跳转Intent并携带Token
Intent intent = new Intent(LoginActivity.this, TodoListActivity.class);
intent.putExtra("GOOGLE_ID_TOKEN", idToken);
startActivity(intent);
finish(); // 可选,关闭登录页避免用户返回

然后在TodoListActivity的onCreate方法里取出这个Token:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_todo_list);
    
    // 获取传递过来的Token
    String idToken = getIntent().getStringExtra("GOOGLE_ID_TOKEN");
    if (idToken == null || idToken.isEmpty()) {
        // 处理Token为空的异常情况,比如跳回登录页
        startActivity(new Intent(this, LoginActivity.class));
        finish();
        return;
    }
    
    // 拿到Token后就可以调用后端接口获取待办数据了
    fetchTodoData(idToken);
}
第二步:用Volley携带Token请求后端API

后端需要验证Token的合法性,所以推荐把Token放在请求头的Authorization字段里(规范格式是Bearer + 空格 + Token),用Volley发起请求的代码示例:

private void fetchTodoData(String idToken) {
    String apiUrl = "你的后端API地址,比如https://your-domain.com/api/get-todos";
    
    StringRequest todoRequest = new StringRequest(Request.Method.GET, apiUrl,
            response -> {
                // 处理后端返回的JSON数据,解析并更新UI展示待办清单
                try {
                    JSONObject jsonResponse = new JSONObject(response);
                    JSONArray todosArray = jsonResponse.getJSONArray("todos");
                    // 遍历数组,把待办项渲染到列表中
                    // 示例:for (int i = 0; i < todosArray.length(); i++) { ... }
                } catch (JSONException e) {
                    e.printStackTrace();
                    // 处理JSON解析错误,比如给用户提示"数据加载失败"
                }
            },
            error -> {
                // 处理请求失败情况,比如网络错误、Token验证失败
                error.printStackTrace();
                // 可以弹出Toast提示用户问题
            }) {
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> headers = new HashMap<>();
            // 把Token放入请求头
            headers.put("Authorization", "Bearer " + idToken);
            return headers;
        }
    };
    
    // 将请求添加到Volley队列
    Volley.newRequestQueue(this).add(todoRequest);
}
第三步:后端PHP验证Token并返回数据

你的PHP后端需要先验证Google ID Token的有效性,再根据Token对应的用户ID查询数据库返回待办数据,核心代码示例:

<?php
// 获取请求头中的Authorization字段
$headers = getallheaders();
if (!isset($headers['Authorization'])) {
    http_response_code(401);
    echo json_encode(['error' => '登录凭证缺失']);
    exit;
}

// 提取Bearer后面的Token字符串
$authHeader = $headers['Authorization'];
$idToken = str_replace('Bearer ', '', $authHeader);

// 用Google官方库验证Token有效性
require_once 'vendor/autoload.php'; // 确保已通过Composer安装Google Client库
$client = new Google_Client(['client_id' => '你的Google OAuth客户端ID']);
$payload = $client->verifyIdToken($idToken);

if ($payload) {
    $googleUserId = $payload['sub']; // Google用户唯一标识ID
    // 连接MySQL数据库,查询该用户的待办数据
    $pdo = new PDO('mysql:host=localhost;dbname=your_db_name', 'db_username', 'db_password');
    $stmt = $pdo->prepare("SELECT * FROM todos WHERE user_id = ?");
    $stmt->execute([$googleUserId]);
    $todos = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    // 返回JSON格式的待办数据
    echo json_encode(['todos' => $todos]);
} else {
    http_response_code(401);
    echo json_encode(['error' => '无效的登录凭证']);
}
?>

注意:需要通过Composer安装Google Client库,命令是composer require google/apiclient:^2.0,并且确保Google OAuth客户端ID和你Android项目中配置的一致。

额外注意事项
  • 确保AndroidManifest.xml中添加了网络权限:<uses-permission android:name="android.permission.INTERNET" />
  • 处理Token过期情况:如果后端返回401错误,说明Token失效,需要跳回登录页让用户重新登录
  • 测试时可以用Logcat打印Token和后端响应,排查数据传递过程中的问题

内容的提问来源于stack exchange,提问作者user3906610

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:46:36