Firebase Cloud Function返回内部错误

时间:2019-04-13 06:44:30

标签: android firebase google-cloud-functions

从我的应用程序调用Firebase Cloud Function时出现错误INTERNAL

服务器代码:

exports.addToCart = functions.https.onCall((data, context) => { 
  // Checking that the user is authenticated.
  if (!context.auth) {
    // Throwing an HttpsError so that the client gets the error details.
    throw new functions.https.HttpsError(
      "failed-precondition",
      "The function must be called " + "while authenticated."
    );
  }

  // Get data
  const food = data.food;

  // Get user details
  const uid = context.auth.uid;

  console.log("User id " + uid);
  console.log("Food name " + food.name);

  return "Added to cart successfully."
});

Java代码:

addToCartTask(foodItem)
  .addOnSuccessListener(s -> {
    Log.e(TAG, "Success : " + s);
  })
  .addOnFailureListener(e -> {
    Log.e(TAG, "Error : " + e.getLocalizedMessage());
  });

private Task<String> addToCartTask(Food foodItem) {
  // Create the arguments to the callable function.
  Map<String, Object> objectHashMap = new HashMap<>();
  objectHashMap.put("foodItem", foodItem);

  Gson gson = new Gson();
  String data = gson.toJson(objectHashMap);

  return firebaseFunctions
    .getHttpsCallable("addToCart")
    .call(data);
  }

错误归因于访问函数中传递的自定义java对象的属性。

如何访问传递的对象属性的属性?

1 个答案:

答案 0 :(得分:1)

您正在使用String调用函数,但是以JSONObject的形式访问它。

documentation for call()表明它接受一系列类型,包括StringMap<String,?>JSONObject。这为您提供了一些传递食物项目并在您的函数中访问它的选项。

  1. 像现在一样,将食品项转换为JSON字符串并传递该字符串。在功能代码中,您需要先使用const food = JSON.parse(data)将字符串转换为对象,然后再访问字段,例如food.foodItem.name

  2. 如果Food没有太多字段,则可以将每个字段放入objectHashMap中并传递地图,而无需转换为JSON。然后,在功能代码中,无需使用JSON.parse()即可访问每个字段。