从android中的firebase函数接收json数据给出空值

Posted

技术标签:

【中文标题】从android中的firebase函数接收json数据给出空值【英文标题】:Receiving json data from firebase function in android gives null value 【发布时间】:2022-01-16 16:26:57 【问题描述】:

我尝试通过 firebase 函数从 firestore 获取文档集合。firebase 函数控制台显示文档的 json 数据并将该数据返回到 android 应用程序,但 firebase 函数可调用获取 null 值。你能帮我如何接收文档吗安卓应用中的数据。

我什至关注了这个Question 的答案,但我仍然在我的应用程序中收到空值。

export const getproducts = functions.https.onCall((data, context)=>
  let productarray = [];
  const productref = admin.firestore().collection("Products")
      .orderBy("product_id").limit(2);
  productref.get()
      .then((DataSnapshot) => 
        productarray=DataSnapshot.docs.map((doc) => 
          return doc.data();
        );
        console.log("products returned.", JSON.stringify(productarray));
        return JSON.stringify(productarray);
      ).catch((error)=> 
        throw new functions.https.HttpsError("unknown", error.message, error);
      );
);

我用于从 android 应用中检索数据的代码

mFunctions = FirebaseFunctions.getInstance();
        return mFunctions
                .getHttpsCallable("getproducts")
                .call()
                .addOnSuccessListener(new OnSuccessListener<HttpsCallableResult>() 
                    @Override
                    public void onSuccess(HttpsCallableResult httpsCallableResult) 
                        try 
                            Gson g = new Gson();
                            String json = g.toJson(httpsCallableResult.getData());
                            ProductModel productModel = g.fromJson(json,ProductModel.class);
                            Log.e("getproducts",productModel.getProduct_id()); //i get null value here.
                         catch (Exception e) 
                            Log.d("Error", e.toString());
                        
                    
                );

控制台中显示的文档:

10:49:59.240 AM
getproducts
products returned. ["cutted_price":100,"dress_color":"blue","product_id":"000001","cutted_price":500,"dress_color":"gray","product_id":"000002"]

【问题讨论】:

【参考方案1】:

您的 Cloud Function 缺少返回语句。

// ...
productref.get()
  .then((DataSnapshot) => 
// ...

应该是

// ...
return productref.get() // <----
  .then((DataSnapshot) => 
// ...

【讨论】:

以上是关于从android中的firebase函数接收json数据给出空值的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 使用 Node Js 功能通知未在 android 中接收,但它直接从 firebase 面板工作

Firebase onCall函数将结果保存到android中的变量[重复]

Android - 自动从 Firebase Auth 中删除非活动用户

通过 Firebase 从 Android 调用云函数

将数据从firebase函数返回到android [重复]

从 Firebase 函数返回数据到 Android [重复]