当我尝试运行我的Android应用程序时,由于导入了允许我使用Watson服务的此程序包,我遇到了运行时错误。
' com.ibm.watson.developer_cloud:java的SDK:2.9.0'
事实上,当我使用与此软件包相关的内容时,出现的错误是:
E/dalvikvm: Could not find class 'javax.naming.InitialContext', referenced from method com.ibm.watson.developer_cloud.util.CredentialUtils.getKeyUsingJNDI
和相应的堆栈跟踪是:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: semantic.myapplication, PID: 29120
java.lang.VerifyError: com/ibm/watson/developer_cloud/util/CredentialUtils
at….
我已经找到了这个错误的真正问题,我发现在出现错误的文件“CredentialUtils.java”中,这三个输入无法识别(无法解析符号):
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
我使用Android Studio和最新版本的jdk(1.8.0.77)。这些java文件存在,我可以看到它们但由于某些原因无法访问:无法在javax.naming(以及其他文件夹)中导入每个文件。
我该如何解决这个问题?我试图导入包含javax.naming类的.jar文件,但是不起作用。有没有办法让这些类可见?
任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
我认为您使用的是早于2.7.1
的版本。我无法重现您的问题,我尝试了不同的配置,包括您的。
确保清理工作区并获取最新版本的库。
在您的build.gradle
中,您应该:
compile 'com.ibm.watson.developer_cloud:java-sdk:2.9.0'
以下是解决您问题的commit。该修补程序已在2.7.1
版本中发布。
这就是我所做的,对我有用:
您应该在Android中使用Watson API的步骤:
File > New > New Project
。next
,next
,next
和Finish
在<project-name>/app/build.gradle
添加:
compile 'com.ibm.watson.developer_cloud:java-sdk:2.9.0'
在MainActiviy.java
末onCreate(...)
添加:
Thread thread = new Thread(new Runnable(){
@Override
public void run() {
try {
SpeechToText service = new SpeechToText();
service.setUsernameAndPassword("<username>", "<password>");
System.out.println(service.getModels());
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
启动模拟器并查看控制台。你应该看到像
这样的消息I/CredentialUtils: JNDI string lookups is not available.
和语音到文本模型列表。
I/System.out: [{
I/System.out: "name": "en-US_NarrowbandModel",
I/System.out: "rate": 8000
I/System.out: }, {
I/System.out: "name": "pt-BR_BroadbandModel",
I/System.out: "rate": 16000
I/System.out: }, {
I/System.out: .... more models here
I/System.out: }, {
I/System.out: "name": "en-US_BroadbandModel",
I/System.out: "rate": 16000
I/System.out: }]