InputConnection.finishComposingText() NullPointerE

2020-02-26 04:08发布

问题:

I am getting this error log on crashlytics. I don't know what makes this crash. It occurs on Android 4.x, 5.x, 6.x devices. (Samsung, Sony, LGE etc.)

Fatal Exception: java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.view.inputmethod.InputConnection.finishComposingText()' on a null object reference
   at android.view.inputmethod.InputConnectionWrapper.finishComposingText(InputConnectionWrapper.java:78)
   at android.view.inputmethod.InputMethodManager.checkFocusNoStartInput(InputMethodManager.java:1809)
   at android.view.inputmethod.InputMethodManager.checkFocus(InputMethodManager.java:1761)
   at android.view.inputmethod.InputMethodManager.isActive(InputMethodManager.java:883)
   at android.widget.Editor$CursorAnchorInfoNotifier.updatePosition(Editor.java:4095)
   at android.widget.Editor$PositionListener.onPreDraw(Editor.java:2564)
   at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1018)
   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2313)
   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1301)
   at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7021)
   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
   at android.view.Choreographer.doCallbacks(Choreographer.java:590)
   at android.view.Choreographer.doFrame(Choreographer.java:560)
   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763)
   at android.os.Handler.handleCallback(Handler.java:739)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:145)
   at android.app.ActivityThread.main(ActivityThread.java:6918)
   at java.lang.reflect.Method.invoke(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

回答1:

Make sure the input connection is not null in your onCreateInputConnection override method.

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
    InputConnection inputConnection = super.onCreateInputConnection(outAttrs);
    if (inputConnection == null)
    {
        return null;
    }
    return new MyInputConnectionWrapper(inputConnection,
            true);
}

Where MyInputConnectionWrapper is your custom input connection wrapper which is extended from InputConnectionWrapper.



回答2:

As mentioned here, this can happen because of the Android Advanced Profiling tool.

Disable it from the Run/Debug Configurations dialog:



回答3:

It also happened to me because of Advanced Profiling option is enabled.

To disable the advanced profiling, follow these steps:

  1. Select Run > Edit Configurations.
  2. Select your app module in the left pane.
  3. Click the Profiling tab, and then uncheck Enable advanced profiling. Learn more



回答4:

The above answer should be correct, but in my scenario, the reason for this error is: Edittext is having focus, and this error occurs when edittext.getText() is used. To avoid this error you must:
edittext.gettext().toString(); Note: This edittext must have focus to make this error.



回答5:

Assume the fragment or Activity have a non EditTextView named mTv; At some appropriate time,mTv.requestFocuse(); This works for me. Hope this helps you.