当前位置: 首页 > 知识库问答 >
问题:

如何在 Java 中从 DialogFlow 获取参数 (Android Studio)

封永嘉
2023-03-14

我需要从DialogFlow获取参数到我的Android应用程序。
我尝试使用getQueryResult().getParameters().getFieldsMap(),
但结果如下。

{type=list_value {
      values {
        string_value: "pizza"
      }
    }
    , ristorante=string_value: ""
    }

我只想获取字符串值“pizza”,而不是整个 FieldMap。我已经看过这个话题,但它对我没有帮助,因为我不知道 protobuf 是什么,看起来有点复杂。

有没有一种简单的方法来获取参数的值?

共有2个答案

洪育
2023-03-14

如果您使用 Dialogflowv2

public String getParameter(GoogleCloudDialogflowV2WebhookRequest request, String parameterName) {
  try {
        GoogleCloudDialogflowV2QueryResult queryResult = request.getQueryResult();
        Map<String, Object> parameters = queryResult.getParameters();
        String parameter = (String) parameters.get(parameterName);
        if(parameter != null && !parameter.equals("")) {
            return parameter;
        }
    } catch (ClassCastException  e) {
            logger.error("Error");
        }
    return null;
}

如果您使用谷歌操作

public String getParameter(ActionRequest request, String parameterName) {
        try {
            Map<String, Object> parameters =  request.getWebhookRequest().getQueryResult().getParameters();
            String parameter = (String) parameters.get(parameterName);
            if(parameter != null && !parameter.equals("")) {
                return parameter;
            }
        } catch (ClassCastException  e) {
            logger.error("Error");
        }
        return null;
    }
吴鸿彩
2023-03-14

我看到两种可能性:

  1. 尝试直接访问映射值。

getFieldsMap() 方法返回一个 java.util.Map 类。您可以尝试通过首先获取值集合,然后迭代来检索值:

Collection colletion = <Detect_Intent_Object>.getQueryResult().getParameters().getFieldsMap().values():
for (iterable_type iterable_element : collection)

从我的拙见来看,bucle 是必要的,因为可能有多个参数。

示例代码:

import com.google.protobuf.util.JsonFormat;
String jsonString = JsonFormat.printToString(<Detect_Intent_Object>.getQueryResult().getParameters());
// Then use a json parser to obtain the values
import org.json.*;
JSONObject obj = new JSONObject(jsonString);
JSONArray jsonnames = obj.names(); 

方法 names() 会让你知道你想要访问的字符串名称。

 类似资料:
  • 问题内容: 我正在为SQLException编写通用记录器,我想获取传递给PreparedStatement的参数,该怎么做?我能够得到他们的数量。 问题答案: 简短的回答:不能。 长答案:所有JDBC驱动程序都会将参数值保留在某个地方,但是没有标准的方法来获取它们。 如果要出于调试或类似目的而打印它们,则有几种选择: 创建一个传递JDBC驱动程序(使用p6spy或log4jdbc作为基础),该驱

  • 本文向大家介绍java中如何获取相关参数,包括了java中如何获取相关参数的使用技巧和注意事项,需要的朋友参考一下 此文通过一段代码来展示java获取相关参数的方法分享给大家: 希望大家能够喜欢。

  • 问题内容: 我有这样的网址: 如何获取章节和帖子的参数值​​? 我的URL在Chapter参数的值中包含“&”。 问题答案: 您可以在Android中使用Uri类来完成此操作; https://developer.android.com/reference/android/net/Uri.html 这样,您甚至可以从查询参数中获取特定元素;

  • 问题内容: 我有一个带有一些GET参数的URL,如下所示: 我需要获得的全部价值。我尝试读取该URL,但只有。如何使用JavaScript执行此操作? 问题答案: JavaScript 本身 没有内置处理查询字符串参数的内容。 在(现代)浏览器中运行的代码可以使用对象(它是浏览器提供给JS的API的一部分): 对于较旧的浏览器(包括Internet Explorer),您可以使用此polyfill

  • 你好,我来自从URL获取JSON对象 我试着去买一顶帽子- 有人能告诉我我做错了什么吗?

  • 问题内容: 我在从URL:获取值方面遇到问题。 帮助我更正我的控制器代码。我无法获得价值。 我的代码如下: : : : 问题答案: 快递4.x 要获取URL参数的值,请使用req.params 如果要获取查询参数,请使用req.query 快递3.x URL参数 查询参数

  • 问题内容: 我在中定义了一个macrodef ,并用来完成这项工作。在这种情况下,我正在验证。 问题是没有检索传递的属性的值。有人知道您如何从javascript中获取属性的值吗? 问题答案: 原来我使用了错误的标签类型。为了使用脚本定义蚂蚁任务,我应该使用not 。使用预定义的对象可以访问任务中的属性和嵌套元素。 这适用于从Ant中的javascript访问属性:

  • 问题内容: 我只是想获取Hibernate绑定到问号“?”后面的查询的值。在JBoss 7上。 所以我正在编辑以添加此内容: 但是我的控制台,日志文件都什么也没得到……我想念的是什么? 问题答案: 哇,它真的不像以前的版本…我终于找到了配置JBoss 7日志记录 和Hibernate 4日志记录配置 的正式方法! 您需要做的是编辑(您的的配置文件)并搜索标签。 然后在中,我已将级别信息切换为TRA