Javax内容不可访问

Javax内容不可访问,java,android,import,ibm-watson,verifyerror,Java,Android,Import,Ibm Watson,Verifyerror,我尝试运行android应用程序时出现运行时错误,原因是导入了允许我使用Watson服务的软件包 'com.ibm.watson.developer_cloud:JavaSDK:2.9.0' 事实上,当我使用与此包相关的内容时,出现的错误是: E/dalvikvm: Could not find class 'javax.naming.InitialContext', referenced from method com.ibm.watson.developer_cloud.util.Crede

我尝试运行android应用程序时出现运行时错误,原因是导入了允许我使用Watson服务的软件包

'com.ibm.watson.developer_cloud:JavaSDK:2.9.0'

事实上,当我使用与此包相关的内容时,出现的错误是:

E/dalvikvm: Could not find class 'javax.naming.InitialContext', referenced from method com.ibm.watson.developer_cloud.util.CredentialUtils.getKeyUsingJNDI
对应的stacktrace为:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: semantic.myapplication, PID: 29120
java.lang.VerifyError: com/ibm/watson/developer_cloud/util/CredentialUtils
at….
我查找了这个错误的真正问题,发现在出现错误的文件“CredentialUtils.java”中,这三个导入未被识别(无法解析符号):

我使用Android Studio和最新版本的jdk(1.8.0.77)。这些java文件存在,我可以看到它们,但由于某些原因无法访问:javax.naming(以及其他文件夹)中的每个文件都无法导入

我怎样才能解决这个问题?我尝试导入一个包含javax.naming类的.jar文件,但没有成功。有没有办法让这些类可见


任何帮助都将不胜感激。谢谢

我认为您使用的版本早于
2.7.1
。我无法重现您的问题,我尝试了不同的配置,包括您的配置。 确保清理工作区并获取最新版本的库。 在
build.gradle
中,您应该有:

compile 'com.ibm.watson.developer_cloud:java-sdk:2.9.0'
这是解决您问题的方法。该修复程序是在
2.7.1
版本中发布的

这就是我所做的,也为我工作:

在Android中使用Watson API的步骤您应该:

  • 下载并安装Android Studio
  • 开放安卓工作室
  • 文件>新建>新建项目
  • 选择一个名称并单击
    next
    next
    next
    Finish
  • /app/build.gradle
    中添加:

    compile 'com.ibm.watson.developer_cloud:java-sdk:2.9.0'  
    
    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();
    
  • mainActivity.java
    onCreate(…)
    末尾添加:

    compile 'com.ibm.watson.developer_cloud:java-sdk:2.9.0'  
    
    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/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: }]
    

  • 我认为您使用的版本早于
    2.7.1
    。我无法重现您的问题,我尝试了不同的配置,包括您的配置。 确保清理工作区并获取最新版本的库。 在
    build.gradle
    中,您应该有:

    compile 'com.ibm.watson.developer_cloud:java-sdk:2.9.0'
    
    这是解决您问题的方法。该修复程序是在
    2.7.1
    版本中发布的

    这就是我所做的,也为我工作:

    在Android中使用Watson API的步骤您应该:

  • 下载并安装Android Studio
  • 开放安卓工作室
  • 文件>新建>新建项目
  • 选择一个名称并单击
    next
    next
    next
    Finish
  • /app/build.gradle
    中添加:

    compile 'com.ibm.watson.developer_cloud:java-sdk:2.9.0'  
    
    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();
    
  • mainActivity.java
    onCreate(…)
    末尾添加:

    compile 'com.ibm.watson.developer_cloud:java-sdk:2.9.0'  
    
    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/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: }]
    

  • 有一个与此相关的问题:您发布的链接与此讨论相同^^对不起,我刚才说的是谢谢您的链接!我已经将包的版本降级为2.6.0,我不再有这个问题,因为在该版本中,文件CredentialUtils不存在。但是,整个包“javax.naming”(以及javax的许多其他包)仍然无法访问和使用。这是一个常见的问题吗?是的,这是我的错,因为我没有验证在android中引入该问题的pull请求…有一个与此相关的问题:您发布的链接与此讨论相同^^抱歉,我刚才说的是谢谢您的链接!我已经将包的版本降级为2.6.0,我不再有这个问题,因为在该版本中,文件CredentialUtils不存在。但是,整个包“javax.naming”(以及javax的许多其他包)仍然无法访问和使用。这是一个常见问题吗?是的,这是我的错,因为我没有验证在android中引入该问题的pull请求…非常感谢。我应该在你回答之前回答。我最近发现我的问题更一般,与Watson API没有太大关系。事实上,在AndroidStudio的项目结构中,SDK和JDK位置是正确指定的,但是当我尝试导入“java”和“javax”包时,只有部分子目录可见。例如,“import javax”。让我只看“crypto、microedition、net、security、sql、xml”子目录-所有其他子目录(es.naming)都不可见,因为它们没有正确编译,即使我可以在“External Libraries”文件夹中看到它们。此外,我还尝试将文件路径作为build.gradle依赖项插入jdk文件夹:“编译文件('C:/Programmi/Java/jdk1.8.0_77/jre/lib/rt.jar')“。这样做,我终于可以看到java和javax的所有子文件夹,但当我尝试运行应用程序时,会出现许多问题,可能是由于与默认编译的现有库rt.jar冲突。所以我有一个更普遍的问题,与沃森服务公司无关。很抱歉,如果我第一次把问题集中在Watson服务上,但我注意到这个问题只是因为他们:)非常感谢。我应该在你回答之前回答。我最近发现我的问题更一般,与Watson API没有太大关系。事实上,在AndroidStudio的项目结构中,SDK和JDK位置是正确指定的,但是当我尝试导入“java”和“javax”包时,只有部分子目录可见。例如,“import javax”。让我只看“crypto、microedition、net、security、sql、xml”子目录-所有其他子目录(es.naming)都不可见,因为它们没有正确编译,即使我可以在“External Libraries”文件夹中看到它们。此外,我还尝试将文件路径作为build.gradle依赖项插入jdk文件夹:“编译文件('C:/Programmi/Java/jdk1.8.0_77/jre/lib/rt.jar')”。这样我终于可以看到Java和javax的所有子文件夹,但是