IBM Watson Visual Recognition参数方法不会隐式接受String

时间:2018-01-10 03:24:29

标签: java eclipse api ibm-watson visual-recognition

我使用Windows构建器创建了一个程序,使用IBM Watson服务创建自定义分类器,一切正常,但是我使用文本fie中的分类器ID对图像进行分类存在问题。

当我将自定义分类器ID放在代码中时,它可以正常工作,但是当我尝试从TextField中获取该ID时,它将无法工作。

这是按钮动作事件中的代码。变量String id完全输出parameters方法中的内容但是它将id(cats_599303326)替换为TextField中的id但是当我将id作为参数放在{ {1}}方法,程序无法成功运行。

另一方面,如果我评论所有内容并输出parameters字符串,请将其复制并粘贴到id方法中,它运行正常。

当我将变量parameters传递给?

时,为什么它不起作用
id

将变量VisualRecognition service = new VisualRecognition( VisualRecognition.VERSION_DATE_2016_05_20 ); service.setEndPoint("https://gateway-a.watsonplatform.net/visual-recognition/api"); service.setApiKey("{api-key}"); File imagesStream = new File(textField.getText()); ClassifyOptions classifyOptions = null; String id = String.format("\"{\\\"classifier_ids\\\": [\\\"%s\\\"]}\"", textField_1.getText()); System.out.println(id); try { classifyOptions = new ClassifyOptions.Builder() .imagesFile(imagesStream) .imagesFilename("Image ") .parameters("{\"classifier_ids\": [\"cats_599303326\"]}") //inside the parameters method, the goal is to replace cats_599303326 with an id given from a textfield .build(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } ClassifiedImages result = service.classify(classifyOptions).execute(); System.out.println(result); 作为参数放在id方法中的错误日志,如前所述,如果我只打印parameters字符串,请将其复制并粘贴为id方法程序中的参数将成功运行但如果我将其作为变量将不会运行:

parameters

2 个答案:

答案 0 :(得分:0)

此错误表示服务无法解析您的JSON参数对象。我怀疑你在从文本字段中获取值时错过了引号或者没有将classifier_ids作为数组提交,但是如果没有更多的代码就无法告诉你如何做到这一点。

答案 1 :(得分:0)

如果stackoverflow家伙终身禁止我,然后来我家谋杀我,我会完全理解!!解决方案很简单,令人尴尬的是我没有想到它。基本上我创建的字符串有额外的引号。解决方案是:

String id = String.format("{\"classifier_ids\": [\"%s\"]}", textField_1.getText());