Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 键盘文本到语音_Java_Android_Android Softkeyboard - Fatal编程技术网

Java 键盘文本到语音

Java 键盘文本到语音,java,android,android-softkeyboard,Java,Android,Android Softkeyboard,我为Android Studio创建了一个小型软键盘,现在想将语音添加到文本中,但在logcat中启动应用程序时出现了以下错误: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference at android.app.Activ

我为Android Studio创建了一个小型软键盘,现在想将语音添加到文本中,但在logcat中启动应用程序时出现了以下错误:

Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
        at android.app.Activity.startActivityForResult(Activity.java:5174)
键盘本身和语音对文本本身都工作得很好。 源代码:

package edmt.dev.androidcustomkeyboard;

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.inputmethodservice.InputMethodService;
        import android.inputmethodservice.Keyboard;
        import android.inputmethodservice.KeyboardView;
        import android.media.AudioManager;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.View;
        import android.view.inputmethod.InputConnection;
import android.widget.ImageButton;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Locale;


public class OrthKeyboard extends InputMethodService implements KeyboardView.OnKeyboardActionListener {

    private KeyboardView kv;
    private Keyboard keyboard;

    public static SpeechInnerClass SpeechInnerClass;




    private  boolean isCaps = false;
    public static String auto_word ="";



    //Press Ctrl+O


    @Override
    public View onCreateInputView() {
        kv = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard,null);
        keyboard = new Keyboard(this,R.xml.qwerty);
        kv.setKeyboard(keyboard);
        kv.setOnKeyboardActionListener(this);
        SpeechInnerClass = new SpeechInnerClass();




        return kv;
    }


    @Override
    public void onPress(int i) {

    }

    @Override
    public void onRelease(int i) {

    }

   @Override
    public void onKey(int i, int[] ints) {

        InputConnection ic = getCurrentInputConnection();
        playClick(i);
      //  MainActivity.count ++;
       if(i==-4222522|i==-4222521|i==-4222523|i==-4222525){
       if(i==-4222522){
           ic.commitText("Case 2",1);
       }
       if(i==-4222521){
           ic.commitText("Case 1",1);
       }
       if(i==-4222523){

           ic.commitText("Case 3",1);
       }

       if(i==-4222525){
           SpeechInnerClass.startVoiceInput();

           ic.commitText(SpeechInnerClass.output,1);
       }

       }
        else {
           switch (i) {
               case Keyboard.KEYCODE_DELETE:
                   ic.deleteSurroundingText(1, 0);
                   break;
               case Keyboard.KEYCODE_SHIFT:
                   isCaps = !isCaps;
                   keyboard.setShifted(isCaps);
                   kv.invalidateAllKeys();
                   break;
               case Keyboard.KEYCODE_DONE:
                   ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
                   break;
               default:
                   char code = (char) i;


                   if (Character.isLetter(code) && isCaps)
                       code = Character.toUpperCase(code);
                   ic.commitText(String.valueOf(code), 1);


                   SettingsActivity.count++;
                   if ((char) i == ' ') {
                       auto_word = "";
                   }
                   if (96 < i && i < 123) {
                       auto_word = auto_word + (char) i;
                   }

           }
       }

    }

    private void playClick(int i) {

        AudioManager am = (AudioManager)getSystemService(AUDIO_SERVICE);
        switch(i)
        {
            case 32:
                am.playSoundEffect(AudioManager.FX_KEYPRESS_SPACEBAR);
                break;
            case Keyboard.KEYCODE_DONE:
            case 10:
                am.playSoundEffect(AudioManager.FX_KEYPRESS_RETURN);
                break;
            case Keyboard.KEYCODE_DELETE:
                am.playSoundEffect(AudioManager.FX_KEYPRESS_DELETE);
                break;
            default: am.playSoundEffect(AudioManager.FX_KEYPRESS_STANDARD);
        }
    }


    @Override
    public void onText(CharSequence charSequence) {

    }

    @Override
    public void swipeLeft() {

    }

    @Override
    public void swipeRight() {

    }

    @Override
    public void swipeDown() {

    }

    @Override
    public void swipeUp() {

    }



    public static class SpeechInnerClass extends AppCompatActivity {
        private static final int REQ_CODE_SPEECH_INPUT = 100;
        public static CharSequence output = "Test";
        private TextView mVoiceInputTv;
        private ImageButton mSpeakBtn;
        public boolean voice = false;




        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);



            if(voice=true){
                startVoiceInput();
            }
        }

        public void startVoiceInput() {
            Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
            intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
            intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
            intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Hello, How can I help you?");
            try {
                startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
            } catch (ActivityNotFoundException a) {

            }
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);

            switch (requestCode) {
                case REQ_CODE_SPEECH_INPUT: {
                    if (resultCode == RESULT_OK && null != data) {
                        ArrayList<String> result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                        output=(result.get(0));
                    }
                    break;
                }

            }
        }
    }

}
试试看


首先,谢谢你,但是我应该把它放在哪里/代码的哪一部分应该放在里面?使用try-catch查找产生错误的代码并将代码放在这个方法中嗨,欢迎使用SO!请扩展您的答案,使其包含一些关于为什么它会这样工作以及如何应用此修复的信息。如有疑问,请始终参考。
2019-07-14 13:23:02.202 12121-12121/? D/libEGL: Emulator has host GPU support, qemu.gles is set to 1.
2019-07-14 13:23:02.211 12121-12121/? D/libEGL: loaded /vendor/lib/egl/libEGL_emulation.so
2019-07-14 13:23:02.214 12121-12121/? D/libEGL: loaded /vendor/lib/egl/libGLESv1_CM_emulation.so
2019-07-14 13:23:02.216 12121-12121/? D/libEGL: loaded /vendor/lib/egl/libGLESv2_emulation.so
2019-07-14 13:39:26.230 12121-12121/? I/dcustomkeyboar: Not late-enabling -Xcheck:jni (already on)
2019-07-14 13:39:26.247 12121-12121/? E/dcustomkeyboar: Unknown bits set in runtime_flags: 0x8000
2019-07-14 13:39:26.247 12121-12121/? W/dcustomkeyboar: Unexpected CPU variant for X86 using defaults: x86
2019-07-14 13:39:26.339 12121-12121/edmt.dev.androidcustomkeyboard I/dcustomkeyboar: The ClassLoaderContext is a special shared library.
2019-07-14 13:39:26.451 12121-12121/edmt.dev.androidcustomkeyboard W/dcustomkeyboar: JIT profile information will not be recorded: profile file does not exits.
2019-07-14 13:39:26.461 12121-12121/edmt.dev.androidcustomkeyboard I/chatty: uid=10132(edmt.dev.androidcustomkeyboard) identical 10 lines
2019-07-14 13:39:26.462 12121-12121/edmt.dev.androidcustomkeyboard W/dcustomkeyboar: JIT profile information will not be recorded: profile file does not exits.
2019-07-14 13:39:26.484 12121-12121/edmt.dev.androidcustomkeyboard I/InstantRun: starting instant run server: is main process
2019-07-14 13:39:26.725 12121-12920/edmt.dev.androidcustomkeyboard D/OpenGLRenderer: Swap behavior 1
2019-07-14 13:39:26.726 12121-12920/edmt.dev.androidcustomkeyboard W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
2019-07-14 13:39:26.727 12121-12920/edmt.dev.androidcustomkeyboard D/OpenGLRenderer: Swap behavior 0
2019-07-14 13:39:26.739 12121-12920/edmt.dev.androidcustomkeyboard D/eglCodecCommon: setVertexArrayObject: set vao to 0 (0) 0 0
2019-07-14 13:39:26.739 12121-12920/edmt.dev.androidcustomkeyboard D/EGL_emulation: eglCreateContext: 0xd85a7cc0: maj 2 min 0 rcv 2
2019-07-14 13:39:26.758 12121-12920/edmt.dev.androidcustomkeyboard D/EGL_emulation: eglMakeCurrent: 0xd85a7cc0: ver 2 0 (tinfo 0xc61374e0)
2019-07-14 13:39:26.778 12121-12920/edmt.dev.androidcustomkeyboard W/Gralloc3: mapper 3.x is not supported
2019-07-14 13:39:26.785 12121-12920/edmt.dev.androidcustomkeyboard D/OpenGLRenderer: Setting buffer count to 3, min_undequeued 1, extraBuffers 0
2019-07-14 13:39:26.814 12121-12920/edmt.dev.androidcustomkeyboard D/EGL_emulation: eglMakeCurrent: 0xd85a7cc0: ver 2 0 (tinfo 0xc61374e0)
2019-07-14 13:39:26.835 12121-12920/edmt.dev.androidcustomkeyboard D/eglCodecCommon: setVertexArrayObject: set vao to 0 (0) 1 0
2019-07-14 13:39:26.944 12121-12920/edmt.dev.androidcustomkeyboard D/EGL_emulation: eglMakeCurrent: 0xd85a7cc0: ver 2 0 (tinfo 0xc61374e0)
2019-07-14 13:39:26.964 12121-12920/edmt.dev.androidcustomkeyboard D/OpenGLRenderer: Setting buffer count to 3, min_undequeued 1, extraBuffers 0
2019-07-14 13:39:26.967 12121-12920/edmt.dev.androidcustomkeyboard D/EGL_emulation: eglMakeCurrent: 0xd85a7cc0: ver 2 0 (tinfo 0xc61374e0)
2019-07-14 13:39:34.439 12121-12920/edmt.dev.androidcustomkeyboard D/OpenGLRenderer: Setting buffer count to 3, min_undequeued 1, extraBuffers 0
2019-07-14 13:39:34.447 12121-12920/edmt.dev.androidcustomkeyboard D/EGL_emulation: eglMakeCurrent: 0xd85a7cc0: ver 2 0 (tinfo 0xc61374e0)
2019-07-14 13:39:34.484 12121-12121/edmt.dev.androidcustomkeyboard E/InputEventReceiver: Exception dispatching input event.
2019-07-14 13:39:34.484 12121-12121/edmt.dev.androidcustomkeyboard E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
2019-07-14 13:39:34.489 12121-12121/edmt.dev.androidcustomkeyboard E/MessageQueue-JNI: java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
        at android.app.Activity.startActivityForResult(Activity.java:5174)
        at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
        at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67)
        at android.app.Activity.startActivityForResult(Activity.java:5131)
        at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:720)
        at edmt.dev.androidcustomkeyboard.OrthKeyboard$SpeechInnerClass.startVoiceInput(OrthKeyboard.java:201)
        at edmt.dev.androidcustomkeyboard.OrthKeyboard.onKey(OrthKeyboard.java:85)
        at android.inputmethodservice.KeyboardView.detectAndSendKey(KeyboardView.java:847)
        at android.inputmethodservice.KeyboardView.onModifiedTouchEvent(KeyboardView.java:1354)
        at android.inputmethodservice.KeyboardView.onTouchEvent(KeyboardView.java:1217)
        at android.view.View.dispatchTouchEvent(View.java:13417)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
        at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:460)
        at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1849)
        at android.app.Dialog.dispatchTouchEvent(Dialog.java:861)
        at android.inputmethodservice.SoftInputWindow.dispatchTouchEvent(SoftInputWindow.java:152)
        at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:418)
        at android.view.View.dispatchPointerEvent(View.java:13676)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5479)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5282)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4785)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4838)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4804)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4944)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4812)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5001)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4785)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4838)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4804)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4812)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4785)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7502)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7471)
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7432)
        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7627)
        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:188)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:336)
        at android.os.Looper.loop(Looper.java:174)
        at android.app.ActivityThread.main(ActivityThread.java:7319)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(Runti
2019-07-14 13:39:34.489 12121-12121/edmt.dev.androidcustomkeyboard D/AndroidRuntime: Shutting down VM
2019-07-14 13:39:34.499 12121-12121/edmt.dev.androidcustomkeyboard E/AndroidRuntime: FATAL EXCEPTION: main
    Process: edmt.dev.androidcustomkeyboard, PID: 12121
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
        at android.app.Activity.startActivityForResult(Activity.java:5174)
        at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
        at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67)
        at android.app.Activity.startActivityForResult(Activity.java:5131)
        at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:720)
        at edmt.dev.androidcustomkeyboard.OrthKeyboard$SpeechInnerClass.startVoiceInput(OrthKeyboard.java:201)
        at edmt.dev.androidcustomkeyboard.OrthKeyboard.onKey(OrthKeyboard.java:85)
        at android.inputmethodservice.KeyboardView.detectAndSendKey(KeyboardView.java:847)
        at android.inputmethodservice.KeyboardView.onModifiedTouchEvent(KeyboardView.java:1354)
        at android.inputmethodservice.KeyboardView.onTouchEvent(KeyboardView.java:1217)
        at android.view.View.dispatchTouchEvent(View.java:13417)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3060)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2755)
        at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:460)
        at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1849)
        at android.app.Dialog.dispatchTouchEvent(Dialog.java:861)
        at android.inputmethodservice.SoftInputWindow.dispatchTouchEvent(SoftInputWindow.java:152)
        at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:418)
        at android.view.View.dispatchPointerEvent(View.java:13676)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5479)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5282)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4785)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4838)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4804)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4944)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4812)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5001)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4785)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4838)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4804)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4812)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4785)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7502)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7471)
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7432)
        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7627)
        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:188)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:336)
        at android.os.Looper.loop(Looper.java:174)
        at android.app.ActivityThread.main(ActivityThread.java:7319)
2019-07-14 13:39:34.500 12121-12121/edmt.dev.androidcustomkeyboard E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:934)
runOnUiThread(new Runnable() {
        @Override
        public void run() {

            //Code

        }
    });