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

Android调用Cloud Function传JSON报错:Cannot read properties of undefined (reading 'map')

解决Cloud Function调用时的"Cannot read properties of undefined (reading 'map')"错误

错误原因

  1. 函数类型不匹配:Android端用getHttpsCallable调用,对应的Cloud Function应该使用onCall类型,而非你当前用的onRequest(普通HTTP函数)。两者的请求参数格式完全不同,导致request.body.data无法正确解析出传递的参数。
  2. 参数传递方式错误:Android端手动拼接了JSON字符串作为参数,但Callable函数要求传递键值对对象(Map),字符串会被当作普通参数,无法解析出users数组。

修正后的Cloud Function代码

exports.getUsers = functions.https.onCall(async (data, context) => {
  // 严谨校验参数格式
  if (!data?.users || !Array.isArray(data.users)) {
    throw new functions.https.HttpsError('invalid-argument', '参数错误:必须包含users数组');
  }

  const users = data.users;
  const phonelist = users.map(user => {
    if (!user.phone) {
      throw new functions.https.HttpsError('invalid-argument', 'users数组元素必须包含phone字段');
    }
    return user.phone.toString();
  });
  
  const userlist = [];
  const snapshot = await db.collection("users").get();
  
  snapshot.docs.forEach((userDoc) => {
    const phone = userDoc.get("phone");
    if (!phone) return;
    // 若需完全匹配手机号,用下面的判断;若需部分匹配,保留你原有的reduce逻辑
    const isMatch = phonelist.includes(phone.toString());
    if (isMatch) {
      userlist.push(userDoc.data());
    }
  });

  return { result: userlist };
});

修正后的Android调用代码

private fun addMessage(): Task<*>? {
    // 用Map构建参数,无需手动拼接JSON字符串
    val user1 = mapOf("phone" to 55512345)
    val user2 = mapOf("phone" to 972525276676)
    val user3 = mapOf("phone" to 55512347)
    val usersList = listOf(user1, user2, user3)
    val data = mapOf("users" to usersList)

    return functions.getHttpsCallable("getUsers")
        .call(data)
        .addOnFailureListener {
            Log.d("DTAG", "调用失败: ${it.message}")
        }
        .addOnSuccessListener { result ->
            Log.d("DTAG", "调用成功: ${result.data.toString()}")
        }
}

额外注意事项

  • 部署前确保使用最新代码:执行命令firebase deploy --only functions:getUsers
  • 数据库中phone字段的类型要和代码中处理后的类型一致(比如统一为字符串),避免匹配失败
  • Callable函数会自动处理错误抛出,Android端的onFailureListener能捕获到具体错误信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:50:22