如何将数据从云函数返回到android并使用它?

时间:2019-06-16 14:11:34

标签: javascript java android firebase google-cloud-functions

如何从Cloud onCall()函数获取数据到Android客户端并在Java代码中使用它?

客户端连接到函数,功能连接到Firestore。但是我无法将数据从函数返回到客户端。我知道数据具有json格式。但是如何将数据传递给android,以及如何在android代码中使用此数据(例如,传递给TextView中的setText)。

java onClick()方法:

onClick(){
String first = editTextTitle.getText().toString();
String second = editTextDescription.getText().toString();

//Here I try to setText received from function, but nothing happen.
tv_function.setText(function_3(first, second).toString());
}

java-调用函数:

private Task<String> function_3(String first, String second) {
    mFunctions = FirebaseFunctions.getInstance();        
    Map<String, Object> data = new HashMap<>();
    data.put("text", first);
    data.put("push", second);

    return mFunctions
            .getHttpsCallable("sendMessageToAndroid")
            .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;
     }
   });
}

javaScript函数:

exports.sendMessageToAndroid = functions.https.onCall((data, context) => {
var batono = {
    first: data.fara,
    second: data.mina
}

return db.collection('abra-codabra').doc("mu-mu").set(batono)
.then(()=>{
    var arba = {
        aram:"aramando",
        borem:"boremuno"
    }
    return arba;
});
});

如何将var“ arba”获取到AndroidStudio并将其设置为TextView?

1 个答案:

答案 0 :(得分:1)

这样做

Map<String, Object> data = new HashMap<>();
    data.put("text", first);
    data.put("push", second);

    return mFunctions
            .getHttpsCallable("sendMessageToAndroid")
            .call(data)
            ...

(如documentation中的示例所示)将包含text元素的地图发送到Callable Cloud Function。

但是,在您的Cloud Function代码中,您可以执行以下操作:

var batono = {
    first: data.fara,
    second: data.mina
}

因此,这意味着您应该发送包含以下元素的地图:faramina,而不是包含text的地图(否则您会做类似{{1 }}。

因此,您很可能应该执行以下操作(但是未经测试):

var batono = {text: data.text}