Javax контент недоступен

У меня есть ошибка во время выполнения, когда я пытаюсь запустить свое приложение для Android, из-за импорта этого пакета, который позволяет мне использовать Watson Services.

'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 (а также других папок) невозможен.

Как я могу решить эту проблему? Я пытался импортировать файл.jar, включая классы javax.naming, но не работает. Есть ли способ сделать видимыми эти классы?

Любая помощь будет оценена. Спасибо!

1 ответ

Я думаю, что вы используете версию старше 2.7.1, Я не могу воспроизвести вашу проблему, и я пробовал с различными конфигурациями, включая вашу. Убедитесь, что вы очистили свое рабочее пространство и получили последнюю версию библиотеки. В вашем build.gradle у тебя должно быть:

compile 'com.ibm.watson.developer_cloud:java-sdk:2.9.0'

Вот коммит, который исправил вашу проблему. Исправление было выпущено в 2.7.1 версия.

Это то, что я сделал, и это сработало для меня:

Действия по использованию API Watson в Android:

  1. Скачайте и установите Android Studio
  2. Откройте Android Studio
  3. File > New > New Project,
  4. Выберите имя и нажмите next, next, next а также Finish
  5. В <project-name>/app/build.gradle добавлять:

    compile 'com.ibm.watson.developer_cloud:java-sdk:2.9.0'  
    
  6. В 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();
    
  7. Запустите симулятор и посмотрите на консоль. Вы должны увидеть сообщение как

    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: }]
    
Другие вопросы по тегам