簡體   English   中英

從 Android 中調用 Firebase Cloud Function 接收數據

[英]Receiving data from calling Firebase Cloud Function in Android

我正在嘗試調用我編寫的 firebase 雲函數。

我已經使用 Postman 測試了該功能來模擬 HTTP 請求。 這是我在 Postman 中調用我的函數時的 JSON 結果:

{
 "groups": [
    {
        "isPublic": true,
        "members": [
            true
        ],
        "numberOfMembers": 1,
        "groupId": "-LAOPAzMGzOd9qULPxue"
    },
    {
        "isPublic": true,
        "members": [
            true
        ],
        "numberOfMembers": 1,
        "groupId": "-LAOP7ISDI2JPzAgTYGi"
    }
 ]
}

我正在嘗試執行相同的操作並在我的 android 應用程序中檢索此 JSON 列表。 我正在關注 Firebase 網站上的示例: https ://firebase.google.com/docs/functions/callable

這是 Firebase 關於如何檢索數據的示例:

return mFunctions
        .getHttpsCallable("addMessage")
        .call(data)
        .continueWith(new Continuation<HttpsCallableResult, String>() {
            @Override
            public String then(@NonNull Task<HttpsCallableResult> task) throws Exception {
                String result = (String) task.getResult().getData();
                return result;
            }
        });

目前尚不清楚如何從我的雲功能中獲取結果並將其用於我的 Android 應用程序的其余部分。

此外,此示例返回一個 Task 對象,根據 Firebase 的文檔,該對象現已棄用: https : //firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/tasks/Task )

有沒有更清晰、更簡單的方法來處理來自函數調用的數據?

調用函數非常簡單,所以我覺得必須有一個更直接的方法來接收響應。

如果您只是對從端點獲取 JSON 感興趣,請從您的 Activity 執行此操作:

        mFunctions
            .getHttpsCallable("getGroups") //Whatever your endpoint is called
            .call()
            .addOnSuccessListener(this, new OnSuccessListener<HttpsCallableResult>() {
                @Override
                public void onSuccess(HttpsCallableResult httpsCallableResult) {
                    try{
                        Gson g = new Gson();
                        String json = g.toJson(httpsCallableResult.getData());
                        Groups groups = g.fromJson(json,Groups.class);
                    } catch (Exception e){
                        Log.d("Error",e.toString());
                    }
                }
            });

如果您使用 Kotlinx 序列化,則可以使用org.json.JsonElement將結果數據轉換為序列化框架將接受的格式:

val json = Json(JsonConfiguration.Stable)

fun getPerson(personId: String): Task<Person> {
    val function = functions.getHttpsCallable("getPersonInfo")

    return function.call(mapOf("personId" to personId)).continueWith { task ->
        val result = task.result ?: throw Exception("result is null")

        val jsonString = org.json.JSONObject(result.data as Map<*, *>).toString()
        json.parse(Person.serializer(), jsonString)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM