Распознавание голоса вылетает приложение после записи - PullRequest
0 голосов
/ 03 марта 2012

В настоящее время я занимаюсь разработкой приложения с использованием API распознавания речи для группового проекта. Я фактически впервые реализовал это около месяца назад, и с тех пор это работало довольно хорошо. Это очень просто, есть только кнопка изображения, которая запускает действие распознавания голоса при нажатии. Первый результат затем «анализируется» приложением (оператор switch, чтобы проверить, какие слова в нем содержатся).

У меня проблема в том, что когда я установил приложение на свой телефон в четверг, оно работало нормально. Но со вчерашнего дня это больше не работает! При нажатии кнопки открывается интерфейс распознавания голоса, он записывает то, что я говорю, а затем экран становится черным и вылетает.

Вот logcat, который я получаю при запуске приложения:

03-03 16:16:05.365: E/AndroidRuntime(12262): FATAL EXCEPTION: main
03-03 16:16:05.365: E/AndroidRuntime(12262): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1234, result=-1, data=Intent { (has extras) }} to activity {com.brice/com.brice.Main}: java.lang.NullPointerException
03-03 16:16:05.365: E/AndroidRuntime(12262):    at android.app.ActivityThread.deliverResults(ActivityThread.java:2992)
03-03 16:16:05.365: E/AndroidRuntime(12262):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3035)
03-03 16:16:05.365: E/AndroidRuntime(12262):    at android.app.ActivityThread.access$1100(ActivityThread.java:127)
03-03 16:16:05.365: E/AndroidRuntime(12262):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1189)
03-03 16:16:05.365: E/AndroidRuntime(12262):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-03 16:16:05.365: E/AndroidRuntime(12262):    at android.os.Looper.loop(Looper.java:137)
03-03 16:16:05.365: E/AndroidRuntime(12262):    at android.app.ActivityThread.main(ActivityThread.java:4507)
03-03 16:16:05.365: E/AndroidRuntime(12262):    at java.lang.reflect.Method.invokeNative(Native Method)
03-03 16:16:05.365: E/AndroidRuntime(12262):    at java.lang.reflect.Method.invoke(Method.java:511)
03-03 16:16:05.365: E/AndroidRuntime(12262):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
03-03 16:16:05.365: E/AndroidRuntime(12262):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
03-03 16:16:05.365: E/AndroidRuntime(12262):    at dalvik.system.NativeStart.main(Native Method)
03-03 16:16:05.365: E/AndroidRuntime(12262): Caused by: java.lang.NullPointerException
03-03 16:16:05.365: E/AndroidRuntime(12262):    at com.brice.Main.onActivityResult(Main.java:310)
03-03 16:16:05.365: E/AndroidRuntime(12262):    at android.app.Activity.dispatchActivityResult(Activity.java:4649)
03-03 16:16:05.365: E/AndroidRuntime(12262):    at android.app.ActivityThread.deliverResults(ActivityThread.java:2988)
03-03 16:16:05.365: E/AndroidRuntime(12262):    ... 11 more

Полагаю, результат = -1 - вот в чем проблема, но я понятия не имею, как с этим справиться ...

Вот часть кода, которая относится к части распознавания речи:

 /**
 * Fire an intent to start the voice recognition activity.
 */
private void startVoiceRecognitionActivity() {
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1); //In order to only get the best result
    startActivityForResult(intent, REQUEST_CODE);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    boolean success=false; //To check if the STT worked properly

    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK)
    {
        // Populate the wordsList with the String value the recognition engine thought it heard
        ArrayList<String> matches = data.getStringArrayListExtra(
                RecognizerIntent.EXTRA_RESULTS);
        //Outputs the message 
        voiceIn.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, matches));
        success=true;
    }

    //Get the result as a String
    first = (String) voiceIn.getItemAtPosition(0);

    super.onActivityResult(requestCode, resultCode, data);
    if (success){
        if (first.contains("slideshow")){
            loadSlideshow();
        }

        else{
            messageTo = first; //Take the speech as the message
            //Post the message to the recipient
            Functions.postData(messageTo, recipient);
            //Notify Granny that the message is sent
            //Toast.makeText(Main.this, "Message Sent", Toast.LENGTH_LONG).show(); //Text Notifier
            tts.speak("Your message has been sent", TextToSpeech.QUEUE_ADD, null); //Speech Notifier
        }
    }

    else{ //If the Speech to Text had a problem, notify the user
        tts.speak("There was a problem with the Speech Recognition Service, you should try again", TextToSpeech.QUEUE_ADD, null); //Speech Notifier
    }

Еще раз все работало нормально в течение последнего месяца и внезапно прекратилось вчера (я изменил код на своей машине, но не установил новую версию на свой телефон, поэтому на телефоне установлена ​​та же версия, что и неделю назад, которая использовала на работу!)

Большое спасибо ..

1 Ответ

1 голос
/ 03 марта 2012
03-03 16:16:05.365: E/AndroidRuntime(12262): Caused by: java.lang.NullPointerException
03-03 16:16:05.365: E/AndroidRuntime(12262):    at        
        com.brice.Main.onActivityResult(Main.java:310)

Проблема в строке 310 вашего файла Main.java, в методе onActivityResult.Если у вас есть шанс, вы можете опубликовать только строку 310 в качестве комментария?

И еще, вызов super.onActivityResult(requestCode, resultCode, data); должен быть первым вызовом в вашем onActivityResult методе,так что двигай эту линию вверх.Это может быть не ваша авария, но это может вызвать проблемы в будущем.

...